如何在子项目的子目录中运行测试

时间:2016-12-15 18:23:47

标签: cmake qt-creator

这是我的结构

MyApp
├── CMakeLists.txt
├── src
│   ├── CMakeLists.txt
│   ├── config
│   ├── controller
└── tests
    ├── CMakeLists.txt
    ├── config
    │   ├── CMakeLists.txt
    │   ├── configurationtest.cpp
    │   └── main.cpp
    ├── controller
        ├── CMakeLists.txt
        ├── controllertest.cpp
        └── main.cpp

当我想执行测试时,我必须选择ControllerTests并运行它。 ConfigurationTest也是一样的。

我想在测试的顶级CMakeLists.txt中添加一些内容,以便能够在子目录中运行所有测试。 这是我的顶级测试CMakeLists.txt

project(MyAppTests)

include_directories(${GTEST_INCLUDE_DIRS})
include_directories($ENV{GMOCK_DIR}/include)

add_subdirectory(config)
add_subdirectory(controller)

每个子目录都有一个main.cpp和add_executable。在配置CMakeLists.txt中有一行:

add_test(NAME ConfigurationTests COMMAND ConfigurationTests)

2 个答案:

答案 0 :(得分:1)

CMake应该已经自动生成了一个目标RUN_TESTS,用于午餐项目中定义的所有测试。

如果不在此处,您可能忘记将BUILD_TESTING选项设置为ON

  

只有在调用了enable_testing()命令时,CMake才会生成测试。当 BUILD_TESTING 选项为 ON 时, CTest模块会自动调用命令

答案 1 :(得分:0)

使用可执行文件确实比使用预定义的RUN_TESTS目标更具灵活性。我使用以下调用 - 在我的二进制输出目录中执行 - 来运行我的所有测试:

ctest.exe -C Debug -j 16 --no-compress-output -T Test --timeout 600

我确实想要

  • 运行测试的Debug配置
  • 并行运行16个测试
  • 拥有no-compress-output,因为我更喜欢这种格式
  • 通过加载Test
  • CTestTestfile.cmake软件并执行定义的测试
    • 此外,还会记录每项测试的输出和结果(参见Testing\...\Test.xml,例如Jenkins xUnit Plugin可以评估)
  • 600秒后超时测试