CMake Ctest 配置FAIL_REGULAR_EXPRESSION仅匹配子串问题咨询
CTest 子串匹配失败规则配置方案
CTest 的 FAIL_REGULAR_EXPRESSION 属性本身默认采用子串匹配逻辑,不需要额外配置就能实现「只要输出包含指定子串就触发测试失败」的效果。你遇到的配置不生效问题,基本都是配置细节错误导致的,按以下步骤排查修复即可:
- 修正 CMake 变量定义语法
你当前写的neg_message="App error: Error code=5"不符合 CMake 变量定义规则,CMake 不会识别这种赋值方式,会导致后续${neg_message}取值为空。正确的变量定义需要用set()指令:
set(neg_message "App error: Error code=5")
- 修正测试名绑定错误
你当前配置中给名为test_app的测试绑定了失败规则,但运行日志里实际执行的测试名为test_neg_app,属性没有绑定到对应测试上自然不会生效。修改set_tests_properties的第一个参数为实际测试名即可:
set_tests_properties(test_neg_app PROPERTIES FAIL_REGULAR_EXPRESSION "${neg_message}")
- 可选:显式声明子串匹配规则
如果担心环境差异导致正则默认规则变化,可以在子串前后加.*匹配任意前后字符,强制走子串匹配逻辑,写法如下:
set(neg_message ".*App error: Error code=5.*") set_tests_properties(test_neg_app PROPERTIES FAIL_REGULAR_EXPRESSION "${neg_message}")
补充说明:你贴出的运行日志已经显示
Error regular expression found in output,说明你当前生效的配置其实已经匹配到了对应子串、测试已经按规则标记为失败。如果实际效果和你的预期相反,需要检查是否混淆了FAIL_REGULAR_EXPRESSION和PASS_REGULAR_EXPRESSION的用途:前者是匹配到子串就标记测试失败,后者是必须匹配到子串才会标记测试成功。
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

