Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
gtest es un marco de Google para escribir pruebas de C++ que pueden ejecutarse en muchas plataformas (incluidas Linux, Mac OS X, Windows, Cygwin, etc.). Basado en la arquitectura xUnit. Admite muchas funciones útiles, incluida la identificación automática de pruebas, aserciones enriquecidas, personalización de aserciones, pruebas de muerte, fallas sin terminación, generación de informes XML, etc.
dirección de descarga más reciente:GitHub - google/googletest: GoogleTest: marco de trabajo de simulación y pruebas de Google
El método de descarga es:clon de gitGitHub - google/googletest: GoogleTest: marco de trabajo de simulación y pruebas de Google
El método de instalación es:
$cdgoogletest
Nota: Si se informa un error durante el proceso de creación, puede agregar la siguiente línea a CMakeLists.txt y luego ejecutar el siguiente comando: SET(CMAKE_CXX_FLAGS "-std=c++11")
$cmake .
$ hacer
Luego se generará en el directorio lib: libgmock.a libgmock_main.a libgtest.a libgtest_main.a
Finalmente hacemos sudo make install.
Estructura de directorios:
Las dos funciones a probar son las siguientes:
simple1.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;
- }
Archivo de encabezado sample.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. Contiene los archivos de encabezado gtest/gtest.h, limites.h (int máximo y int mínimo)
2.Formato
- TEST(测试套名,测试用例名)
- {
- //EXPECT_XX
-
- }
Puede haber varios casos de prueba en un conjunto de pruebas.
p.ej:
prueba_unitaria_simple.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
Para implementar la función principal de la prueba, por supuesto, no necesitamos escribir la función principal, luego debemos conectarnos a la biblioteca gtest_main.a (agregue la opción -lgtest_main al compilar). Por ejemplo, compila así:
g++ muestra1.cc muestra1_unittest.cc -lgtest -std=c++14 -lgtest_main -lpthread -o prueba1
Resultados de:
Método de escritura fijo, agregue main al final.
- int main(int argc, char** argv)
- {
- testing::InitGoogleTest(&argc,argv);
- return RUN_ALL_TESTS();
- }
Prueba completa.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();
- }
Elimine la opción -lgtest_main al compilar: