繁体   English   中英

在 ctest 如何检查非零退出代码和特定的 string output?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM