[英]In ctest how to check for both non-zero exit code and specific string output?
我想测试一个应用程序是否以非零代码退出并输出特定的 string。 我这样设置属性:
set_tests_properties( myapp-test-foobar PROPERTIES WILL_FAIL TRUE FAIL_REGULAR_EXPRESSION "^Usage: myapp" )
但是即使应用程序的退出码为0,测试也会通过。虽然WILL_FAIL
是必须的,否则匹配FRE时测试会失败,退出码会被忽略。 我搜索了 cmake 文档以寻找无济于事的答案。
编辑:事实证明,如果设置了 PASS_REGULAR_EXPRESSION 或 FAIL_REGULAR_EXPRESSION,ctest(我使用的是 v3.19.2)不会检查退出代码。 通过或失败条件仅由 RE 匹配来满足。
因此,我的一个应用程序中出现了一个讨厌的错误。
编辑:下面评论中建议的答案是用于处理在正在测试的错误条件下中止(即崩溃)的应用程序,因此与我的情况不同。 请参阅下面的评论以获取进一步的推理和解决方案。
我在上面的评论中描述的修复不起作用。 正如我最近发现不匹配的 FAIL_REGULAR_EXPRESSION 不会导致测试失败。 看到这个问题。
这是因为 ctest 确实
match FAIL_REGULAR_EXPRESSION || exit code = 0
当设置 WILL_FAIL 时。 如果未设置,则 ctest 会
if (PASS_REGULAR_EXPRESSION) if (match PASS_REGULAR_EXPRESSION) pass else() fail endif() else() if (exit code == 0) pass else() fail endif() endif()
您可以通过滥用PASS_REGULAR_EXPRESSION
来测试正确的错误代码和错误消息,如下所示
add_test( NAME myapp-test-ktx2-in-exit-code COMMAND myapp -o foo infile.ktx2 WORKING_DIRECTORY ${MY_WORK_DIR} ) set_tests_properties( myapp-test-ktx2-in-exit-code PROPERTIES WILL_FAIL TRUE ) add_test( NAME myapp-test-ktx2-in COMMAND myapp -o foo input.ktx2 WORKING_DIRECTORY ${MY_WORK_DIR} ) set_tests_properties( myapp-test-ktx2-in PROPERTIES PASS_REGULAR_EXPRESSION ".* is not a KTX v1 file." )
如果两个测试都通过,我们保证我们有一个非零退出代码并且错误消息匹配PASS_REGULAR_EXPRESSION
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.