使用 ctest 实现非失败超时

Fel*_*lix 5 cmake ctest

我在 CMakeLists.txt 中指定一个测试,该测试运行可执行文件,并且应该查找特定输出( )PASS_REGULAR_EXPRESSION来确定成功。

由于二进制文件不会自行终止,因此我还想在一些TIMEOUT.

PASS_REGULAR_EXPRESSION如果 my出现在 之前,测试应该通过TIMEOUT,否则测试应该失败。

我的 CMakeLists.txt 看起来是谎言:

add_test(NAME sometest COMMAND my_binary)
set_tests_properties(sometest PROPERTIES 
                     PASS_REGULAR_EXPRESSION "All systems go[.]"
                     TIMEOUT 10) 
Run Code Online (Sandbox Code Playgroud)

不幸的是,有一个TIMEOUT 总是将测试标记为失败。是否可以指定一个非失败超时?

Bar*_*uza 0

我只是在寻找类似问题的解决方案,我在 CMake 邮件列表中找到了它:

CMakeLists.txt:

add_test(NAME mytest 
         COMMAND ${CMAKE_COMMAND} -DMYEXE=${PATH_TO_MYEXE} -DARG_TIMEOUT -P ${CMAKE_CURRENT_LIST_DIR}/ExecuteTest.cmake)
Run Code Online (Sandbox Code Playgroud)

执行测试.cmake:

execute_process(COMMAND ${PATH_TO_MYEXE}
                TIMEOUT ${ARG_TIMEOUT}
                OUTPUT_VARIABLE output)

if(NOT output MATCHES "^my_desired_regex$")
  message(FATAL_ERROR "myexe did not produce desired output")
endif()
Run Code Online (Sandbox Code Playgroud)