CMake 和 CTest:自动 运行 测试依赖项
CMake and CTest: automatically run test's dependencies
在我的 CMakeLists.txt 我有这样的东西:
set_property(TEST testX APPEND PROPERTY DEPENDS testY)
set_property(TEST testX APPEND PROPERTY DEPENDS testZ)
我想要一些方法来自动 运行 testX
及其所有依赖项。
类似于:
ctest <options> testX
因此,CTest 将 运行 textY
、testZ
和 testX
。
有什么办法吗?
或者,如果现在不可能,有没有办法通过脚本从 CMake 构建目录中提取有关依赖项的信息?
据我所知,没有内置的方法可以做到这一点。
我能想到的实现您的目标的最佳方法是使用 LABELS
property on the tests. You can retrieve the list of dependencies using get_property
or get_test_property
并将相同的标签应用于 testX
及其每个相关测试:
get_test_property(testX DEPENDS DependenciesOfTestX)
set_tests_properties(testX ${DependenciesOfTestX} PROPERTIES LABELS LabelX)
然后您可以告诉 CTest 仅 运行 带有该标签的测试:
ctest -L LabelX
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
它会自动将 testY
和 testZ
添加到要执行的测试集中:
ctest -R testX
这也将确保 testX
仅在 testY
和 testZ
通过后才会 运行。如果 testY
或 testZ
中的任何一个失败,将跳过 testX
。 CMake 3.9 中的 ctest
中还添加了新选项 -FS
、-FC
和 -FA
,允许在 [=13] 处控制自动添加夹具 setup/cleanup 测试=] 命令行。例如,要暂时跳过将 testY
添加到测试集但仍自动添加 testZ
,可以这样做:
ctest -R testX -FS testY
夹具属性在 CMake docs 中进行了描述,以下文章更全面地介绍了夹具功能:
https://crascit.com/2016/10/18/test-fixtures-with-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 将 运行 textY
、testZ
和 testX
。
有什么办法吗?
或者,如果现在不可能,有没有办法通过脚本从 CMake 构建目录中提取有关依赖项的信息?
据我所知,没有内置的方法可以做到这一点。
我能想到的实现您的目标的最佳方法是使用 LABELS
property on the tests. You can retrieve the list of dependencies using get_property
or get_test_property
并将相同的标签应用于 testX
及其每个相关测试:
get_test_property(testX DEPENDS DependenciesOfTestX)
set_tests_properties(testX ${DependenciesOfTestX} PROPERTIES LABELS LabelX)
然后您可以告诉 CTest 仅 运行 带有该标签的测试:
ctest -L LabelX
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
它会自动将 testY
和 testZ
添加到要执行的测试集中:
ctest -R testX
这也将确保 testX
仅在 testY
和 testZ
通过后才会 运行。如果 testY
或 testZ
中的任何一个失败,将跳过 testX
。 CMake 3.9 中的 ctest
中还添加了新选项 -FS
、-FC
和 -FA
,允许在 [=13] 处控制自动添加夹具 setup/cleanup 测试=] 命令行。例如,要暂时跳过将 testY
添加到测试集但仍自动添加 testZ
,可以这样做:
ctest -R testX -FS testY
夹具属性在 CMake docs 中进行了描述,以下文章更全面地介绍了夹具功能:
https://crascit.com/2016/10/18/test-fixtures-with-cmake-ctest/