我在.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给我指明了正确的方向,我才明白这种行为。我也发现这是一个糟糕的行为选择。当出现错误条件时,我的所有工具都输出一个非零错误代码和一条消息。我需要测试两个。我之前问过这个问题。它需要重复测试。