为什么测试FAIL_REGULAR_EXPRESSION即使不匹配,测试仍通过此"fail"测试?



我在.cmake文件中使用以下行添加了一个简单的测试到ctest:

add_test( NAME ktxsc-test-many-in-one-out
COMMAND ktxsc -o foo a.ktx2 b.ktx2 c.ktx2
)
set_tests_properties(
ktxsc-test-many-in-one-out
PROPERTIES
WILL_FAIL TRUE
FAIL_REGULAR_EXPRESSION "^Can't use -o when there are multiple infiles."
)

测试通过,TestLog显示

----------------------------------------------------------
Test Pass Reason:
Error regular expression found in output. Regex=[^Can't use -o when there are multiple infiles.]
"ktxsc-test-many-in-one-out" end time: Jun 30 16:34 JST
"ktxsc-test-many-in-one-out" time elapsed: 00:00:00
----------------------------------------------------------

如果我把FAIL_REGULAR_EXPRESSION改成

FAIL_REGULAR_EXPRESSION "some rubbish"

测试仍然通过,即使应用程序打印与之前相同的消息。这次测试日志显示

----------------------------------------------------------
Test Passed.
"ktxsc-test-many-in-one-out" end time: Jun 30 16:53 JST
"ktxsc-test-many-in-one-out" time elapsed: 00:00:00
----------------------------------------------------------

这是我通常在没有设置*_REGULAR_EXPRESSION时看到的。

为什么会发生这种情况?当FAIL_REGULAR_EXPRESSION不匹配时,我如何让ctest测试失败?

感谢@Tsyvarev的回答。

ctest正在做

match FAIL_REGULAR_EXPRESSION || exit code != 0

来确定一个测试失败了。如果匹配成功退出代码不是检查。如果匹配失败,则检查退出代码并忽略失败的匹配。

文件不清楚。我已经读过很多遍了,直到@Tsyvarev给我指明了正确的方向,我才明白这种行为。我也发现这是一个糟糕的行为选择。当出现错误条件时,我的所有工具都输出一个非零错误代码和一条消息。我需要测试两个。我之前问过这个问题。它需要重复测试。

相关内容

  • 没有找到相关文章

最新更新