CMake和CTest的默认"test"命令会跳过一个特殊命名的测试。

3
我正在使用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 test还是make skip_test,都会出现"未找到测试!!!"的错误。我还尝试制作一个自定义的CTest文件,并添加set(CTEST_CUSTOM_TESTS_IGNORE skip_test)。这样做可以使make test忽略"skip_test",但现在运行make skip_test会回应"未找到测试!!!"的信息。
有什么建议吗?

我发现由CMake生成的Makefile中定义了目标“make test”,它运行ctest并在末尾添加了额外的$(ARGS)选项。我发现一种“解决”我的问题的方法是手动输入“-E .*skip_test”,它将跳过我的名为“skip_test”的测试。如何告诉CMake将此附加到自动定义的“make test”目标? - user35959
2个回答

2
我实际上使用了一个不同的解决方案。这是我所做的。对于我想要排除的测试,我在添加它们时使用了以下命令:“add_test( ..... CONFIGURATIONS ignore_flag)”,其中ignore_flag是你想要的任何短语。然后,在我的CMakeLists.txt中,当我定义一个自定义目标“add_custom_target(ignore_tests ...)”时,我给它ctest .... -C ignore_flag。现在,“make test”将跳过这些测试!“make ignore_Tests”将运行被忽略的测试+未被忽略的测试,这一点我可以接受。

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 的功能,它实际上是用来在你重构测试以使其再次通过时暂时禁用测试的。这比注释掉测试要好,因为它仍然会编译它,并且运行套件后它会提醒你已经禁用了测试。

这似乎是个合理的想法。我还没有测试过它,因为我尝试使用Ctest配置标志,但你的想法可能更容易实现。谢谢! - user35959

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接