如何配置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
相关产品推荐
相关产品推荐

