当涉及到cmake和ctest时,我有很多不明白的地方。我实际上找不到一个好的教程或可以很好地解释 ctest 的东西。
我试图为我的代码编写一些测试。我将测试放在不同的函数中,这些函数都是从main调用的.cpp如下所示:
int main()
{
test1();
test2();
test3();
...
exit(0);
}
我创建了一个CMakeLists.txt以创建目标测试。
set (TESTS
main.cpp
)
add_executable (tests ${TESTS})
target_link_libraries (tests ...)
enable_testing()
add_test(my-test tests)
现在我可以调用ctest run
$ ctest run
Test project /.../tests
Start 1: my-test
1/1 Test #1: my-test ......................... Passed 0.01 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.01 sec
但这只给了我一个测试用例,尽管在内部我有多个测试用例,每个测试用例都在一个单独的函数中。我可以提取函数以分隔文件,但这样我就有数百个文件。如何避免每个测试都有单独的文件?
我一直在寻找这样的东西。
add_test( test1 tests::test1() )
add_test( test2 tests::test2() )
我完全知道这是错误的和幼稚的等等。但我希望你能了解我的问题。
CTest 仅适用于命令,即可执行文件或等效项。它调用测试运行程序。它本身不是测试运行器。
正常的测试方法是
- 使用支持粒度测试和结果输出的测试框架来创建测试运行器,例如 Catch 或 Google Test/Google Mock 或 Python
- 按类别对测试运行者进行分组,例如单元测试或集成,最好在每个类别中按时间组织
- 按模块对每个测试运行程序中的单元测试进行分组,即单元测试运行程序永远不会测试多个模块。
因此,从这个角度来看,您的问题似乎是第 1 步:您需要一个测试框架来创建精细的测试输出。
> CMake 可以生成test_runner可执行文件。请参阅Noel O'Boyle的博客条目,了解如何在单个文件中创建多个测试:https://baoilleach.blogspot.com/2013/06/using-ctest-with-multiple-tests-in.html?m=1