使用 ctest 的每个测试都需要单独的文件吗?



当涉及到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 仅适用于命令,即可执行文件或等效项。它调用测试运行程序。它本身不是测试运行器。

正常的测试方法是

  1. 使用支持粒度测试和结果输出的测试框架来创建测试运行器,例如 Catch 或 Google Test/Google Mock 或 Python
  2. 按类别对测试运行者进行分组,例如单元测试或集成,最好在每个类别中按时间组织
  3. 按模块对每个测试运行程序中的单元测试进行分组,即单元测试运行程序永远不会测试多个模块。

因此,从这个角度来看,您的问题似乎是第 1 步:您需要一个测试框架来创建精细的测试输出。

> CMake 可以生成test_runner可执行文件。请参阅Noel O'Boyle的博客条目,了解如何在单个文件中创建多个测试:https://baoilleach.blogspot.com/2013/06/using-ctest-with-multiple-tests-in.html?m=1

相关内容

  • 没有找到相关文章

最新更新