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

C++使用Google Test测试自定义断言的方法及死亡测试报错解决

问题根因
  • 正则表达式语法错误:EXPECT_DEATH的第二个参数为POSIX正则表达式,*是正则中的量词,表示匹配前一个字符0次或多次,不能单独作为表达式开头,你写的"*"不符合正则语法,直接触发了GTest的正则解析报错。
  • 多余的exit(0)调用:GTest的死亡测试会自动fork子进程执行待测试的崩溃代码,你在测试函数末尾主动调用exit(0)会干扰测试的正常执行逻辑,属于冗余代码需要删除。
修改方案

你可以根据需求选择两种写法:

1. 宽松验证(仅验证程序崩溃,不校验输出内容)

把第二个参数改为".*",这是正则中匹配任意长度任意字符的标准写法:

TEST(Logger_DeathTest, assertionTest) {
    int test_val = 5;
    EXPECT_DEATH(SN_ASSERT(test_val < 0, "Value should not be less than zero"), ".*");
}

2. 严谨验证(同时校验崩溃输出内容)

直接写你期望匹配的输出子串即可,GTest的正则匹配支持子串匹配,不需要写完整的输出内容:

TEST(Logger_DeathTest, assertionTest) {
    int test_val = 5;
    // 只要输出中包含该字符串即可匹配成功
    EXPECT_DEATH(SN_ASSERT(test_val < 0, "Value should not be less than zero"), 
                 "Assertion Failed: test_val < 0 :: Value should not be less than zero");
}

小提示:Windows环境下GTest死亡测试的正则支持存在部分限制,使用简单子串匹配的兼容性更好。

内容的提问来源于stack exchange,提问作者Avi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:12:01