cmake作为一个强大的构建系统指导工具,同时也提供了测试功能,可用于项目的单元测试等,也可以与其他测试框架协作,如googletest,共同完成项目开发中的测试工作,本节我们就来学习 如何借助cmake 完成测试
本专栏的实践代码全部放在 github 上,欢迎 star !!!
如有问题,欢迎留言、或加群【392784757】交流
接下来给出我们本节的CMakeLists.txt 文件
cmake_minimum_required(VERSION 3.20)
project(test_ctest)
file(WRITE test_ctest.cpp [=[
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
if(argc <=1 ) // 没有传递参数
return -1;
cout<<argv[1]<<endl;
return 0;
}
]=])
add_executable(test_ctest test_ctest.cpp)
# 测试用例
add_test(NAME test_return_-1 #
COMMAND test_ctest
)
add_test(NAME test_return_0 #
COMMAND test_ctest test_return_0
)
##################
add_test(NAME test_success # 测试控制台输出
COMMAND test_ctest success
)
set_tests_properties(test_success
PROPERTIES
PASS_REGULAR_EXPRESSION success #成功字符串匹配正则
)
add_test(NAME test_failed # 测试控制台输出
COMMAND test_ctest failed
)
set_tests_properties(test_failed
PROPERTIES
FAIL_REGULAR_EXPRESSION failed #成功字符串匹配正则
)
enable_testing()
接下来,我们将逐行进行解释,
首先,我们来明确一下测试,将我们的程序的输出与期待输出进行判断
程序的输出 在这里分为两种情况
程序运行 控制台输出
程序运行 返回值 (最常见的也就是 main 函数 返回 0 还是 -1)
也就是对程序的执行过程进行验证,是否符合我们的预期
cmake 测试
涉及命令
- add_test()
add_test(NAME <name>
COMMAND <command> [<arg>...] # 具体执行的命令 也就是 运行程序
[CONFIGURATIONS <config>...]
[WORKING_DIRECTORY <dir>]
[COMMAND_EXPAND_LISTS])
- set_tests_properties()
设定测试属性
PASS_REGULAR_EXPRESSION 匹配失败的控制台输出
FAIL_REGULAR_EXPRESSION 匹配成功的控制台输出
如下面的事例,
程序输出 success ,则程序运行符合逻辑,即测试通过
程序输出 failed,则程序运行不符合逻辑,测试未通过
add_test(NAME test_success # 测试控制台输出
COMMAND test_ctest success
)
set_tests_properties(test_success
PROPERTIES
PASS_REGULAR_EXPRESSION success #成功字符串 匹配正则
)
add_test(NAME test_failed # 测试控制台输出
COMMAND test_ctest failed
)
set_tests_properties(test_failed
PROPERTIES
FAIL_REGULAR_EXPRESSION failed #成功字符串匹配正则
- enable_testing()
启用测试
构建过程
cmake -S . -B build
cmake --build build
cd build
ctest -C Debug
输出测试结果