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 构建目录中提取有关依赖项的信息?

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。CMake 3.9 的ctest中还添加了-FS-FC-FA的新选项,允许在ctest命令行自动添加夹具设置/清理测试。例如,要暂时跳过向测试集添加testY但仍自动添加testZ,可以这样做:

ctest -R testX -FS testY

CMake 文档中介绍了夹具属性,以下文章更全面地介绍了夹具功能:

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

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

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

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

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

ctest -L LabelX

相关内容

  • 没有找到相关文章

最新更新