CMake和CTest的默认"测试"命令跳过一个特别命名的测试

时间:2015-07-06 17:39:02

标签: unit-testing cmake googletest ctest

我在CMake上使用CTest来运行一些测试。我使用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 testmake skip_test。我还尝试制作自定义CTest文件并添加set(CTEST_CUSTOM_TESTS_IGNORE skip_test)。这样做现在make test忽略" skip_test",但现在正在运行make skip_test以&#34响应;没有找到测试!!!"。

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:1)

我不确定是否可以通过CTest完全执行此操作,但由于您已使用“googletest”标记此问题,因此我假设您将其用作测试框架。所以,你也许可以利用Gtest的disable testsrun disabled tests的能力。

通过更改相关测试以使其名称中包含前导DISABLED_,当您执行make test时,默认情况下不会运行这些测试。

然后,您可以添加自定义目标,该目标将使用相应的Gtest标志调用您的测试可执行文件,以仅运行禁用的测试:

add_custom_target(skip_test
    MyTestBinary --gtest_filter=*DISABLED_* --gtest_also_run_disabled_tests VERBATIM)

这有点滥用Gtest功能 - 它真的意味着暂时禁用测试,同时重构任何让测试再次通过的测试。这只是评论测试,因为它继续编译它,并且它在运行你禁用测试的套件后给出了一个唠叨的提醒。

答案 1 :(得分:1)

我实际上使用了不同的解决方案。这就是我做的。对于我想要排除的测试,我在添加它时使用了以下命令:

“add_test(..... CONFIGURATIONS ignore_flag)”其中ignore_flag是你想要的任何短语。然后,在我的CMakeLists.txt中,当我定义自定义目标时 add_custom_target(ignore_tests ...) 我给它ctest .... -C ignore_flag

现在,make test会跳过这些测试! make ignore_Tests将运行被忽略的测试+未被忽略的测试,我没关系。