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

如何配置Google Test以预期std::abort()调用?

解决Google Test捕获std::abort()的问题

你的问题核心是匹配器使用错误:std::abort()会通过触发SIGABRT信号终止进程,而你用的::testing::ExitedWithCode是用来匹配exit()这类正常退出返回的状态码的,两者不匹配导致测试失败。

要正确捕获std::abort(),只需把匹配器换成::testing::SignaledWithCode并指定信号为SIGABRT即可,修正后的代码如下:

// 自定义断言宏的占位函数
void MyFunction()
{
    std::abort();
}

TEST(TestGroup1, TestName)
{
    EXPECT_EXIT(MyFunction(), ::testing::SignaledWithCode(SIGABRT), ".*");
}

额外说明

  • Google Test的EXPECT_EXIT支持两类终止场景的匹配:
    • ExitedWithCode(code):对应调用exit(code)或_exit(code)的正常退出情况
    • SignaledWithCode(signal):对应因指定信号(如SIGABRT、SIGSEGV)触发的异常终止情况
  • 第三个参数的正则表达式可以根据std::abort()实际输出的日志调整,比如部分环境下abort会输出"Aborted",可以写成".*Aborted.*"来做更精准的匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:51:16