CMake 和 CTest 的默认 "test" 命令会跳过特别命名的测试
CMake and CTest's default "test" command skips a specially named test
我正在使用 CTest 和 CMake 来 运行 一些测试。我使用 enable_testing()
命令,它为我提供了 make test
的默认命令。我的子目录中的所有测试都被考虑在内(通过执行 add_test
命令)并且 make test
工作得很好,除了一个问题。
有一个特定的测试,我将其命名为 skip_test
,我不想在 make test
时成为 运行。我想添加一个自定义目标,这样我就可以 运行 make skip_test
并且它将 运行 该测试。
我可以通过执行 add_custom_target(skip_test ...)
并为 CTest 提供 -R
标志并告诉它查找名称中包含 "skip_test" 的文件来做到这一点。这似乎也有效。我现在的问题是:如何让 make test
命令忽略 skip_test
?
如果我尝试注释掉 enable_testing
并添加我自己的 add_custom_target(test ....)
,我现在会得到 "No tests found!!!" make test
或 make skip_test
。我还尝试制作自定义 CTest 文件并添加 set(CTEST_CUSTOM_TESTS_IGNORE skip_test)
。这行得通,现在 make test
忽略了 "skip_test",但现在 运行ning make skip_test
响应 "no tests found!!!".
如有任何建议,我们将不胜感激!
我不确定完全通过 CTest 完成此操作的方法,但由于您已使用 "googletest" 标记此问题,我假设您正在使用它作为测试框架。所以,你也许可以利用 Gtest 的能力 disable tests and also to run disabled tests.
通过将有问题的测试更改为在其名称中有前导 DISABLED_
,当您执行 make test
时,默认情况下这些测试将不会是 运行 .
然后您可以添加您的自定义目标,它将使用适当的 Gtest 标志调用您的测试可执行文件到 运行 只有禁用的测试:
add_custom_target(skip_test
MyTestBinary --gtest_filter=*DISABLED_* --gtest_also_run_disabled_tests VERBATIM)
这有点滥用 Gtest 功能 - 它实际上是用来暂时禁用测试,同时重构任何内容以使测试再次通过。这胜过仅仅注释掉测试,因为它会继续编译它,并且它会在 运行 关闭您已禁用测试的套件后给出一个唠叨的提醒。
我实际上使用了不同的解决方案。这是我所做的。对于我想排除的测试,我在添加它们时使用了以下命令:
"add_test( ..... CONFIGURATIONS ignore_flag)" 其中 ignore_flag 是您想要的任何短语。然后,在我的 CMakeLists.txt 中,当我定义自定义目标时
add_custom_target(ignore_tests ...)
我给它 ctest .... -C ignore_flag
现在,make test 将跳过这些测试! make ignore_Tests will 运行 被忽略的测试 + 未被忽略的测试,我同意。
我正在使用 CTest 和 CMake 来 运行 一些测试。我使用 enable_testing()
命令,它为我提供了 make test
的默认命令。我的子目录中的所有测试都被考虑在内(通过执行 add_test
命令)并且 make test
工作得很好,除了一个问题。
有一个特定的测试,我将其命名为 skip_test
,我不想在 make test
时成为 运行。我想添加一个自定义目标,这样我就可以 运行 make skip_test
并且它将 运行 该测试。
我可以通过执行 add_custom_target(skip_test ...)
并为 CTest 提供 -R
标志并告诉它查找名称中包含 "skip_test" 的文件来做到这一点。这似乎也有效。我现在的问题是:如何让 make test
命令忽略 skip_test
?
如果我尝试注释掉 enable_testing
并添加我自己的 add_custom_target(test ....)
,我现在会得到 "No tests found!!!" make test
或 make skip_test
。我还尝试制作自定义 CTest 文件并添加 set(CTEST_CUSTOM_TESTS_IGNORE skip_test)
。这行得通,现在 make test
忽略了 "skip_test",但现在 运行ning make skip_test
响应 "no tests found!!!".
如有任何建议,我们将不胜感激!
我不确定完全通过 CTest 完成此操作的方法,但由于您已使用 "googletest" 标记此问题,我假设您正在使用它作为测试框架。所以,你也许可以利用 Gtest 的能力 disable tests and also to run disabled tests.
通过将有问题的测试更改为在其名称中有前导 DISABLED_
,当您执行 make test
时,默认情况下这些测试将不会是 运行 .
然后您可以添加您的自定义目标,它将使用适当的 Gtest 标志调用您的测试可执行文件到 运行 只有禁用的测试:
add_custom_target(skip_test
MyTestBinary --gtest_filter=*DISABLED_* --gtest_also_run_disabled_tests VERBATIM)
这有点滥用 Gtest 功能 - 它实际上是用来暂时禁用测试,同时重构任何内容以使测试再次通过。这胜过仅仅注释掉测试,因为它会继续编译它,并且它会在 运行 关闭您已禁用测试的套件后给出一个唠叨的提醒。
我实际上使用了不同的解决方案。这是我所做的。对于我想排除的测试,我在添加它们时使用了以下命令:
"add_test( ..... CONFIGURATIONS ignore_flag)" 其中 ignore_flag 是您想要的任何短语。然后,在我的 CMakeLists.txt 中,当我定义自定义目标时 add_custom_target(ignore_tests ...) 我给它 ctest .... -C ignore_flag
现在,make test 将跳过这些测试! make ignore_Tests will 运行 被忽略的测试 + 未被忽略的测试,我同意。