CMake和CTest:自动运行测试的依赖项

时间:2015-06-12 17:29:37

标签: c++ c testing cmake ctest

在我的CMakeLists.txt中我有这样的事情:

 set_property(TEST testX APPEND PROPERTY DEPENDS testY)
 set_property(TEST testX APPEND PROPERTY DEPENDS testZ)

我想要一些方法来自动运行testX及其所有依赖项。 类似的东西:

ctest <options> testX

因此,CTest将运行textYtestZtestX。 有没有办法做到这一点?

或者,如果现在不可能,有没有办法通过脚本从CMake构建目录中提取依赖关系的信息?

2 个答案:

答案 0 :(得分:3)

据我所知,没有内置的方法可以做到这一点。

我能想到实现目标的最佳方法是在测试中使用LABELS property。您可以使用get_propertyget_test_property检索依赖项列表,并将相同的标签应用于testX及其每个相关测试:

get_test_property(testX DEPENDS DependenciesOfTestX)
set_tests_properties(testX ${DependenciesOfTestX} PROPERTIES LABELS LabelX)

然后你可以告诉CTest只运行带有该标签的测试:

ctest -L LabelX

答案 1 :(得分:2)

在CMake 3.7中添加了对测试装置的支持,它们完全符合您的要求。您的特定场景将如下实现:

set_property(TEST testX PROPERTY FIXTURES_REQUIRED Foo)
set_property(TEST testY PROPERTY FIXTURES_SETUP Foo)
set_property(TEST testZ PROPERTY FIXTURES_SETUP Foo)

然后,您可以要求ctest仅运行testX,它会自动将testYtestZ添加到要执行的测试集中:

ctest -R testX

它还将确保testX仅在testYtestZ通过后才会运行。如果testYtestZ中的任何一个失败,则会跳过testX。新的选项-FS-FC-FA也被添加到CMake 3.9中的ctest,允许在ctest处自动添加夹具设置/清理测试命令行。例如,要暂时跳过将testY添加到测试集但仍然自动添加testZ,可以执行以下操作:

ctest -R testX -FS testY

在CMake docs中描述了灯具属性,以下文章更全面地介绍了灯具功能:

https://crascit.com/2016/10/18/test-fixtures-with-cmake-ctest/