使用CTest运行嵌套测试

时间:2012-01-03 17:28:16

标签: unit-testing cmake ctest

我有一个小但非平凡的项目,出于架构原因,它被构建为三个单独的项目,它们是相互依赖的,所以除非我特别关注,或者提高测试覆盖率,否则它会发现一个洞,它对我来说,从proejct root开始工作是有道理的。

布局如下:

/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/

关于体系结构的一句话,libmyproject是我应用程序的真正核心,它是以这种方式构建的,因为CLI是一种将代码发送给最终用户的可怕方式,作为库,它也可以用于C#和Objective-C应用程序。 (以及所有按预期工作的方式)

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

vlc-plugin在这里并不重要,只是表明并非/src/*/中的所有内容都有单元测试。

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

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

当我在/build工作并运行cmake时,各个组件都是使用CMake正确构建的(使用add_subdirectories()),但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.

我希望ADD_TEST()来自/src/libmyotherproject/tests/CMakeLists.txt的{​​{1}}来电,他们会被运行吗? (当我从cmake

运行/build/时,至少会编译它们

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

1 个答案:

答案 0 :(得分:4)

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

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