cmake可以通过add_test对本工程测试,但是这种方式比较简单,没有办法做复杂的用例测试,因此一般情况下只是做项目目录或者链接过程的一些简单工程编译类测试。如果想对项目接口完成复杂的测试,还是需要写完整的测试用例。
通过在项目根目录下的CMakeLists.txt配置文件中添加
enable_testing()
1
可以开启项目的测试功能。
一定要在根目录下的CMakeLists.txt中开启,不然执行make test时会报错。
随后项目的cmake配置文件中可以添加add_test指令
add_test(NAME <name> [CONFIGURATIONS [Debug|Release|...]]
[WORKING_DIRECTORY dir]
COMMAND <command> [arg1 [arg2 ...]])
1
2
3
其中通过NAME关键值指定本测试的名称,可以随意命名,
Debug/Release选项可以控制在不同的编译版本下是否进行测试。
通过WORKING_DIRECTORY可以设置工作路径,command表示可运行程序
比如:
ADD_TEST(NAME test1 COMMAND main)
1
你可以不对结果进行检查,但大多数情况下你都需要检查test1的输出结果,可以通过如下:
set_tests_properties(test1 PROPERTIES PASS_REGULAR_EXPRESSION "Hello Cmake")
1
运行cmake && make test结果如下:
Start 1: test1
1/1 Test #1: test1 ............................ Passed 0.00 sec
100% tests passed, 0 tests failed out of 1
1
2
3
4
5
如果失败的话,也会有提示
Start 1: test1
1/1 Test #1: test1 ............................***Failed Required regular expression not found.Regex=[Hello
] 0.00 sec
0% tests passed, 1 tests failed out of 1
add_test的命令形式如下
add_test(NAME <name> COMMAND <command> [<arg>...]
[CONFIGURATIONS <config>...]
[WORKING_DIRECTORY <dir>]
[COMMAND_EXPAND_LISTS])
set_tests_properties的命令形式如下
set_tests_properties(test1 [test2...]
PROPERTIES prop1 value1 prop2 value2)
我见过的cmake工具测试的套路之一如下
首先,启动测试 enable_testing()
其次,add_test(...)
接下来,set_tests_properties(...)
案例目录如下
.
├── build
├── CMakeLists.txt
└── main.cpp
main.cpp的内容如下
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int sum(int a, int b)
{
>---return a+b;
}
int main(int argc, char* argv[])
{
>---if(3 == argc)
>---{
>--->---cout << "parameter right" << endl;
>--->---cout << sum(atoi(argv[1]), atoi(argv[2])) << endl;
>---}
>---else
>---{
>--->---cout << "input num err" << endl;
>--->---return -1;
>---}
>---return 0;
}
CMakeLists.txt的内容如下
#最小版本说明
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
#项目信息
PROJECT(main)
#生成可执行文件
ADD_EXECUTABLE(main main.cpp)
#使能测试
enable_testing()
#添加测试
add_test(demo_test main 2 3)
#设定测试特性
set_tests_properties(demo_test PROPERTIES PASS_REGULAR_EXPRESSION "5")
build是编译目录,方便编译出错时,清除生成的缓存文件
cd build //进入编译目录
cmake .. //编译主目录的CMakeLists.txt
make //编译生成的MakeFile.txt
make test //执行CMakeLists.txt里的测试
执行结果如下图所示