我使用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 ....)
,我得到"没有找到测试!!"现在对于make test
或make skip_test
。我还尝试制作自定义CTest文件并添加set(CTEST_CUSTOM_TESTS_IGNORE skip_test)
。现在make test
忽略了"skip_test",但是现在运行的make skip_test
响应"no tests found!! "
任何建议都将非常感谢!
我实际上使用了不同的解决方案。这就是我所做的。对于我想要排除的测试,在添加它们时使用了以下命令:
" add_test(…其中ignore_flag是您想要的任何短语。然后,在我的CMakeLists.txt中,当我定义自定义目标时Add_custom_target (ignore_tests…)我给它一个测试....- c ignore_flag
现在,make test将跳过这些测试!make ignore_Tests将运行被忽略的测试和未被忽略的测试,我对此没有意见。
我不确定是否完全通过CTest来做到这一点,但既然你已经用"googletest"标记了这个问题,我假设你正在使用它作为你的测试框架。所以,你也许可以利用Gtest的功能来禁用测试,也可以运行禁用的测试。
通过更改所讨论的测试在其名称中有一个前导DISABLED_
,当您执行make test
时,这些测试在默认情况下不会运行。
然后您可以添加您的自定义目标,它将使用适当的Gtest标志调用您的测试可执行文件,以仅运行禁用的测试:
add_custom_target(skip_test
MyTestBinary --gtest_filter=*DISABLED_* --gtest_also_run_disabled_tests VERBATIM)
这是对Gtest功能的滥用——它实际上是用来在你重构任何东西以使测试再次通过时暂时禁用测试的。这比仅仅注释掉测试要好,因为它会继续编译它,并且在运行套件后会不断提醒您已经禁用了测试。