【问题标题】:Do I need separate files for each test with ctest?使用 ctest 进行每个测试是否需要单独的文件?
【发布时间】:2017-08-22 10:17:14
【问题描述】:

关于 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() )

我完全意识到这是错误的和幼稚的等等。但我希望你能了解我的问题。

【问题讨论】:

    标签: c++ cmake ctest


    【解决方案1】:

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

    正常的测试方法是

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

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

    【讨论】:

    • 我一直在用cmocka,效果不错。但这仅适用于 C 语言
    猜你喜欢
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多