使用 CTest 运行嵌套测试

Lee*_*ley 4 unit-testing cmake ctest

我有一个小但不平凡的项目,由于架构原因,它被构建为三个独立的项目,它们是相互依赖的,所以除非我特别专注,或者提高发现漏洞的测试覆盖率,否则这是有意义的我从项目根开始工作。

布局是这样的:

/CMakeLists.txt
/build/
/src/command-line-application/
/src/command-line-application/CMakeLists.txt
/src/command-line-application/build/
/src/command-line-application/src/
/src/command-line-application/tests/
/src/command-line-application/include/
/src/vlc-plugin/
/src/vlc-plugin/src/
/src/libmyproject/
/src/libmyproject/CMakeLists.txt
/src/libmyproject/build/
/src/libmyproject/src/
/src/libmyproject/tests/
/src/libmyproject/include/
/src/libmyotherproject/
/src/libmyotherproject/CMakeLists.txt
/src/libmyotherproject/build/
/src/libmyotherproject/src/
/src/libmyotherproject/tests/
/src/libmyotherproject/include/
Run Code Online (Sandbox Code Playgroud)

关于架构的一句话,libmyproject是我的应用程序的真正核心,它是这样构建的,因为 CLI 是将代码发送给最终用户的可怕方式,作为一个库,它也可以在 C# 和 Objective-C 应用程序中使用。(一切都按预期工作)

libmyotherproject是一些特定于平台的支持代码,不直接连接到libmyproject,它有一些单元测试。

除了表明并非所有内容都有单元测试之外,这vlc-plugin在这里并不重要。/src/*/

我的工作流程通常是破解 CLI 应用程序,直到出现有用的东西,然后将其重构到库中,并确保它是可移植的。

当我工作时/src/*/build/,通常是跑步时cmake ../ && make && ctest --output-on-failure,一切正常。

/build当我在和 run中工作时cmake,各个组件是add_subdirectories()从 CMake 正确构建的(使用),但CTest没有递归地找到测试。

该文档对CTest您应该做的事情有点无帮助:

USAGE
         ctest [options]

DESCRIPTION
       The  "ctest"  executable is the CMake test driver program.  CMake-generated build trees created for
       projects that use the ENABLE_TESTING and ADD_TEST commands have testing support.  This program will
       run the tests and report results.
Run Code Online (Sandbox Code Playgroud)

ADD_TEST()自从这些电话存在于以来,我就预计/src/libmyotherproject/tests/CMakeLists.txt它们会被运行?(它们至少在我运行时被cmake编译/build/

我希望我能够提供足够的信息,谢谢。

DLR*_*ave 5

include(CTest)
Run Code Online (Sandbox Code Playgroud)

在进行任何 add_subdirectory 调用之前,在您的顶级 CMakeLists.txt 文件中。

这将为您调用enable_testing,并且如果您想在项目上运行ctest仪表板脚本以将结果发送到CDash服务器,还可以进行设置。