提示:文章
文章目录
前言
前期疑问:
本文目标:
一、背景
最近写的代码需要加测试套,一开始很懵逼,然后尝试百度调试,最后也被我搞出来了,还行。
二、googleTest初识
2.1 googleTest
https://blog.csdn.net/weixin_44244190/article/details/129278803
三、# 实现gtest
2.1构建工程
将googleTest文件夹和main.cpp文件和test_TESTF.cpp文件和test_math.cpp文件放在同级目录。
googlTest文件夹下载地址:官网:https://github.com/google/googletest
main.cpp文件
#include <gtest/gtest.h>
#include <iostream>
#if defined(_MSC_VER)
#include <direct.h>
#define GetCurrentDir _getcwd
#elif defined(__unix__)
#include <unistd.h>
#define GetCurrentDir getcwd
#else
#endif
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
test_TESTF.cpp文件
#include <gtest/gtest.h> // googletest header file
#include <iostream>
class googleMyTest : public testing::Test
{
public:
static void SetUpTestCase()
{
std::cout << "SetUpTestCase" << std::endl;
}
static void TearDownTestCase()
{
std::cout << "TearDownTestCase" << std::endl;
}
virtual void SetUp()
{
std::cout << "SetUp" << std::endl;
}
virtual void TearDown()
{
std::cout << "TearDown" << std::endl;
}
};
TEST_F(googleMyTest, my_test_f_1)
{
int x = 1;
EXPECT_EQ(x, 1);
}
test_math.cpp文件
#include <iostream>
#include "robot_math.h"
#include <gtest/gtest.h>
//这边的add、sub等函数可以是代码中的函数,可以在这边增加测试,看下函数输出是否符合预期。
TEST(add, test)
{
auto res = add(10, 5);
std::cout << "add res: " << res << std::endl;
}
TEST(sub, test)
{
auto res = sub(10, 5);
std::cout << "sub res: " << res << std::endl;
}
TEST(multiply, test)
{
auto res = multiply(10, 5);
std::cout << "multiply res: " << res << std::endl;
}
TEST(divide, test)
{
auto res = divide(10, 5);
std::cout << "divide res: " << res << std::endl;
}
robot_math.cpp文件
#include "robot_math.h"
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
return a / b;
}
robot_math.h文件
#ifndef ROBOT_MATH_H
#define ROBOT_MATH_H
int add(int a, int b);
int sub(int a, int b);
int multiply(int a, int b);
int divide(int a, int b);
#endif
2.2问题解决
类中不将SetUpTestCase函数设置成public,会报错如下
D:/AppData/CLion/testProj/test_googletest/googletest/googletest/include/gtest/internal/gtest-internal.h:512:29: error: 'static void googleMyTest::SetUpTestCase()' is private within this context
512 | GetNotDefaultOrNull(&T::SetUpTestCase, &Test::SetUpTestCase);
2.3 cmakelist.txt
cmake_minimum_required(VERSION 3.16)
get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
message(${ProjectId})
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
# 添加googletest库
add_subdirectory(googletest)
# 添加可执行文件
add_executable(${ProjectId}
test_math.cpp
robot_math.cpp
test_TESTF.cpp
main.cpp
)
# 链接googletest库
target_link_libraries(${ProjectId} gtest_main)
2.4 执行结果
D:\AppData\CLion\testProj\test_googletest\cmake-build-local\test_googletest.exe
[==========] Running 5 tests from 5 test suites.
[----------] Global test environment set-up.
[----------] 1 test from googleMyTest
SetUpTestCase
[ RUN ] googleMyTest.my_test_f_1
SetUp
TearDown
[ OK ] googleMyTest.my_test_f_1 (1 ms)
TearDownTestCase
[----------] 1 test from googleMyTest (3 ms total)
[----------] 1 test from add
[ RUN ] add.test
add res: 15
[ OK ] add.test (0 ms)
[----------] 1 test from add (2 ms total)
[----------] 1 test from sub
[ RUN ] sub.test
sub res: 5
[ OK ] sub.test (0 ms)
[----------] 1 test from sub (2 ms total)
[----------] 1 test from multiply
[ RUN ] multiply.test
multiply res: 50
[ OK ] multiply.test (0 ms)
[----------] 1 test from multiply (2 ms total)
[----------] 1 test from divide
[ RUN ] divide.test
divide res: 2
[ OK ] divide.test (0 ms)
[----------] 1 test from divide (2 ms total)
[----------] Global test environment tear-down
[==========] 5 tests from 5 test suites ran. (32 ms total)
[ PASSED ] 5 tests.
进程已结束,退出代码为 0
三、 googleTest调试
在Clion上调试。
使用gtest_main进行调试
cmakelist.txt如下
cmake_minimum_required(VERSION 3.16)
get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
message(${ProjectId})
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -D_DEBUG")
# 添加googletest库
add_subdirectory(googletest)
# 添加可执行文件
add_executable(${ProjectId}
test_math.cpp
robot_math.cpp
test_TESTF.cpp
main.cpp
)
# 链接googletest库
target_link_libraries(${ProjectId} gtest_main)
这边需要注意的是一定要使用debug,使用release无法调试。
总结
未完待续