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

5
在我的 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个回答

5

从CMake 3.7开始,支持测试夹具(test fixtures),它们可以完全满足你的需求。你的特定场景将如下实现:

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

这将确保只有在testYtestZ通过后,testX才会运行。如果testYtestZ中任何一个失败,testX将被跳过。新选项-FS-FC-FA也已添加到CMake 3.9的ctest中,允许通过ctest命令行控制自动添加装置设置/清除测试。例如,要暂时跳过向测试集添加testY,但仍自动添加testZ,可以执行以下操作:

ctest -R testX -FS testY

夹具属性在CMake 文档中有描述,下面的文章更全面地介绍了夹具功能:

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


3
我所知道的没有内置的方式来实现这一点。
我能想到的最好的方法是在测试中使用LABELS属性。您可以使用get_propertyget_test_property检索依赖项列表,并将相同的标签应用于testX及其每个依赖测试。
get_test_property(testX DEPENDS DependenciesOfTestX)
set_tests_properties(testX ${DependenciesOfTestX} PROPERTIES LABELS LabelX)

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

ctest -L LabelX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接