使用ctest我是否需要为每个测试单独的文件?

时间:2017-08-22 10:17:14

标签: c++ cmake 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() )

我完全清楚这是错误的,天真的等等。但我希望你能够了解我的问题。

1 个答案:

答案 0 :(得分:2)

CTest仅适用于命令,即可执行文件或等效命令。它调用测试运行器。它本身不是测试运行者。

正常的测试方法是

  1. 使用支持粒度测试和结果输出的测试框架来创建测试运行器,例如Catch或Google Test / Google Mock或Python
  2. 按类别对测试跑步者进行分组,例如单元测试或集成,最好在每个类别中按时间组织
  3. 按模块对每个测试运行器中的单元测试进行分组,即单元测试运行器从不测试多个模块。
  4. 因此,从这个角度来看,您的问题似乎是第1步:您需要一个测试框架来创建粒度测试输出。

相关问题