τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Το gtest είναι ένα πλαίσιο από την Google για τη σύνταξη δοκιμών C++ που μπορεί να εκτελεστεί σε πολλές πλατφόρμες (συμπεριλαμβανομένων Linux, Mac OS X, Windows, Cygwin κ.λπ.). Βασισμένο στην αρχιτεκτονική xUnit. Υποστηρίζει πολλές χρήσιμες λειτουργίες, όπως αυτόματη αναγνώριση δοκιμής, εμπλουτισμένες δηλώσεις, προσαρμογή ισχυρισμών, δοκιμή θανάτου, αποτυχία χωρίς τερματισμό, δημιουργία αναφορών XML κ.λπ.
Διεύθυνση λήψης gtest:GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework
Η μέθοδος λήψης είναι:git κλώνοςGitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework
Ο τρόπος εγκατάστασης είναι:
$ cd googletest
Σημείωση: Εάν αναφέρετε κάποιο σφάλμα κατά τη διαδικασία δημιουργίας, μπορείτε να προσθέσετε την ακόλουθη γραμμή στο CMakeLists.txt και, στη συνέχεια, να εκτελέσετε την ακόλουθη εντολή: SET(CMAKE_CXX_FLAGS "-std=c++11")
$ cmake .
$ κάνει
Στη συνέχεια θα δημιουργηθεί στον κατάλογο lib: libgmock.a libgmock_main.a libgtest.a libgtest_main.a
Τέλος κάνουμε sudo εγκατάσταση.
Δομή καταλόγου:
Οι δύο λειτουργίες που θα ελεγχθούν είναι οι εξής:
απλό1.cc
- #include "sample1.h"
-
- // Returns n! (the factorial of n). For negative n, n! is defined to be 1.
- int Factorial(int n) {
- int result = 1;
- for (int i = 1; i <= n; i++) {
- result *= i;
- }
-
- return result;
- }
-
- // Returns true iff n is a prime number.
- bool IsPrime(int n) {
- // Trivial case 1: small numbers
- if (n <= 1) return false;
-
- // Trivial case 2: even numbers
- if (n % 2 == 0) return n == 2;
-
- // Now, we have that n is odd and n >= 3.
-
- // Try to divide n by every odd number i, starting from 3
- for (int i = 3; ; i += 2) {
- // We only have to try i up to the square root of n
- if (i > n/i) break;
-
- // Now, we have i <= n/i < n.
- // If n is divisible by i, n is not prime.
- if (n % i == 0) return false;
- }
-
- // n has no integer factor in the range (1, n), and thus is prime.
- return true;
- }
Δείγμα αρχείου κεφαλίδας.h
- #ifndef GTEST_SAMPLES_SAMPLE1_H_
- #define GTEST_SAMPLES_SAMPLE1_H_
-
- // Returns n! (the factorial of n). For negative n, n! is defined to be 1.
- int Factorial(int n);
-
- // Returns true iff n is a prime number.
- bool IsPrime(int n);
-
- #endif
1. Περιέχει τα αρχεία κεφαλίδας gtest/gtest.h, limits.h (μέγιστο int και ελάχιστο int)
2.Μορφοποίηση
- TEST(测试套名,测试用例名)
- {
- //EXPECT_XX
-
- }
Μπορεί να υπάρχουν πολλές περιπτώσεις δοκιμών σε μια σουίτα δοκιμών
π.χ:
simple_unittest.cc
- #include <limits.h>//包含最大最小数
- #include "sample1.h"
- #include "gtest/gtest.h"//gtest头文件
- namespace {
-
- TEST(FactorialTest, Negative) {
- // 测试名叫Negative,属于FactorialTest测试套
- // 测试用例
- EXPECT_EQ(1, Factorial(-5));//断言相等
- EXPECT_EQ(1, Factorial(-1));
- //前后顺序不影响
- EXPECT_GT(Factorial(-10), 0);//断言大于
- }
-
- TEST(FactorialTest, Zero) {
- EXPECT_EQ(1, Factorial(0));
- }
-
- TEST(FactorialTest, Positive) {
- EXPECT_EQ(1, Factorial(1));
- EXPECT_EQ(2, Factorial(2));
- EXPECT_EQ(6, Factorial(3));
- EXPECT_EQ(40320, Factorial(8));
- }
-
- // Tests IsPrime() 测试是否是素数
- TEST(IsPrimeTest, Negative) {
- //预测 true or false
- EXPECT_FALSE(IsPrime(-1));
- EXPECT_FALSE(IsPrime(-2));
- EXPECT_FALSE(IsPrime(INT_MIN));
- }
-
- TEST(IsPrimeTest, Trivial) {
- EXPECT_FALSE(IsPrime(0));
- EXPECT_FALSE(IsPrime(1));
- EXPECT_TRUE(IsPrime(2));
- EXPECT_TRUE(IsPrime(3));
- }
-
- TEST(IsPrimeTest, Positive) {
- EXPECT_FALSE(IsPrime(4));
- EXPECT_TRUE(IsPrime(5));
- EXPECT_FALSE(IsPrime(6));
- EXPECT_TRUE(IsPrime(23));
- }
- } // namespace
Για να υλοποιήσουμε την κύρια συνάρτηση του τεστ, φυσικά δεν χρειάζεται να γράψουμε την κύρια συνάρτηση, τότε πρέπει να συνδεθούμε στη βιβλιοθήκη gtest_main.a (προσθέστε την επιλογή -lgtest_main κατά τη μεταγλώττιση). Για παράδειγμα, μεταγλωττίστε ως εξής:
g++ sample1.cc sample1_unittest.cc -lgtest -std=c++14 -lgtest_main -lpthread -o test1
Αποτελέσματα των:
Διορθώθηκε η μέθοδος γραφής, προσθέστε κύρια στο τέλος
- int main(int argc, char** argv)
- {
- testing::InitGoogleTest(&argc,argv);
- return RUN_ALL_TESTS();
- }
Πλήρης test.cc:
- #include <limits.h>//包含最大最小数
- #include "sample1.h"
- #include "gtest/gtest.h"//gtest头文件
- namespace {
-
- TEST(FactorialTest, Negative) {
- // 测试名叫Negative,属于FactorialTest测试套
- // 测试用例
- EXPECT_EQ(1, Factorial(-5));//断言相等
- EXPECT_EQ(1, Factorial(-1));
- //前后顺序不影响
- EXPECT_GT(Factorial(-10), 0);//断言大于
- }
-
- TEST(FactorialTest, Zero) {
- EXPECT_EQ(1, Factorial(0));
- }
-
- TEST(FactorialTest, Positive) {
- EXPECT_EQ(1, Factorial(1));
- EXPECT_EQ(2, Factorial(2));
- EXPECT_EQ(6, Factorial(3));
- EXPECT_EQ(40320, Factorial(8));
- }
-
- // Tests IsPrime() 测试是否是素数
- TEST(IsPrimeTest, Negative) {
- //预测 true or false
- EXPECT_FALSE(IsPrime(-1));
- EXPECT_FALSE(IsPrime(-2));
- EXPECT_FALSE(IsPrime(INT_MIN));
- }
-
- TEST(IsPrimeTest, Trivial) {
- EXPECT_FALSE(IsPrime(0));
- EXPECT_FALSE(IsPrime(1));
- EXPECT_TRUE(IsPrime(2));
- EXPECT_TRUE(IsPrime(3));
- }
-
- TEST(IsPrimeTest, Positive) {
- EXPECT_FALSE(IsPrime(4));
- EXPECT_TRUE(IsPrime(5));
- EXPECT_FALSE(IsPrime(6));
- EXPECT_TRUE(IsPrime(23));
- }
- } // namespace
-
- int main(int argc, char** argv)
- {
- testing::InitGoogleTest(&argc,argv);
- return RUN_ALL_TESTS();
- }
Καταργήστε την επιλογή -lgtest_main κατά τη μεταγλώττιση: