如何使用CMake和CTest进行单元测试。
CMake是一个跨平台的构建工具,可以自动生成与平台相关的Makefile或Visual Studio项目文件,简化了C++程序的构建过程。而CTest是CMake的测试工具,它可以自动化运行单元测试,收集测试结果并生成报告。
下面是使用CMake和CTest进行单元测试的步骤:
- 编写C++程序代码和对应的单元测试代码。
- 在CMakeLists.txt文件中添加测试目标(test target)和相关配置,如测试代码的编译选项、链接库等。
- 运行CMake来生成Makefile或Visual Studio项目文件,包括测试目标。 运行make或Visual Studio等构建工具来编译测试目标。
- 运行ctest命令来自动化运行单元测试,并收集测试结果。
- 可以使用CTest生成各种测试报告,如文本报告、XML报告、HTML报告等。
- CTest的具体用法可以通过执行"ctest --help"查看CTest命令的帮助信息。
总的来说,CMake和CTest能够帮助C++程序员简化构建和测试过程,并提供各种工具来方便测试结果的收集和分析。
假设我们有一个简单的C++函数,计算两个整数的和,如下所示:
intadd(int a,int b){return a + b;}
我们要编写一个单元测试,测试这个函数的正确性。首先在项目根目录下创建一个名为"CMakeLists.txt"的文件,并添加如下内容:
# 设置项目名称和版本号
project(my_project VERSION 1.0)# 添加测试目录
add_subdirectory(tests)
接着,在"tests"目录下创建一个名为"CMakeLists.txt"的文件,并添加如下内容:
# 添加测试用例
add_executable(test_add test_add.cpp)
# 链接gtest库
find_package(GTest REQUIRED)target_link_libraries(test_add GTest::GTest GTest::Main)
# 添加测试
add_test(NAME test_add COMMAND test_add)
其中,test_add.cpp是我们编写的测试用例代码,GTest是Google Test库,需要先安装并配置好环境。test_add.cpp的内容如下:
#include"gtest/gtest.h"#include"../add.h"TEST(addTest, testAdd){EXPECT_EQ(add(1,2),3);EXPECT_EQ(add(0,0),0);EXPECT_EQ(add(-1,1),0);}intmain(int argc,char** argv){
testing::InitGoogleTest(&argc, argv);returnRUN_ALL_TESTS();}
其中,add.h是我们编写的函数头文件,保存了add函数的声明。在测试代码中,我们使用Google Test的宏EXPECT_EQ来断言add函数的返回值是否符合预期。
最后,我们可以在项目根目录下运行如下命令来生成Makefile并编译测试目标:
mkdir build &&cd build
cmake ..make
运行完上述命令后,可以在build目录下看到生成的可执行文件test_add和测试报告。我们可以运行如下命令来运行测试并查看测试报告:
ctest
这时,CTest会自动运行test_add测试,并在终端输出测试结果。如果测试通过,CTest的输出会显示"100% tests passed"的信息。如果测试失败,CTest会显示测试失败的详细信息。
这就是一个简单的使用CMake和CTest进行单元测试的示例。需要注意的是,实际使用时可能需要根据项目和需求进行适当调整和定制。
运行完CTest后,会输出测试结果的汇总信息,包括测试用例的执行情况、测试用例通过率、测试用例耗时等统计信息。如果有测试用例失败,还会输出详细的错误信息,以便于用户进行代码调试。
以下是一个简单的示例,假设我们有一个名为example的测试集,其中包含了两个测试用例addTest和subTest:
$ ctest -R example
Test project /home/user/my_project/build
Start1: addTest
1/2 Test #1: addTest ...................... Passed 0.01 secStart2: subTest
2/2 Test #2: subTest ...................... Passed 0.01 sec100% tests passed,0 tests failed outof2
Total Test time(real)=0.03 sec
在这个例子中,我们使用了ctest命令执行example测试集,使用了-R选项来指定只执行测试名称中包含example的测试用例。执行结果显示,测试集中的两个测试用例addTest和subTest都通过了测试,测试通过率为100%,总共耗时0.03秒。
如果有测试用例失败,输出结果如下所示:
$ ctest -R example
Test project /home/user/my_project/build
Start1: addTest
1/2 Test #1: addTest ......................***Failed 0.01 secStart2: subTest
2/2 Test #2: subTest ...................... Passed 0.01 sec50% tests passed,1 tests failed outof2
Total Test time(real)=0.03 sec
The following tests FAILED:
1- addTest (Failed)
在这个例子中,测试集中的addTest测试用例执行失败,输出了详细的错误信息。测试通过率为50%,总共耗时0.03秒。
版权归原作者 rosLAB 所有, 如有侵权,请联系我们删除。