You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 18:45:04