如何在Google Test的EXPECT_CALL中添加自定义失败提示信息
Google Test Mock期望自定义失败提示解决方案
Google Test 目前原生不支持直接在 EXPECT_CALL 语句后通过 << 运算符追加自定义失败提示,你可以用以下两种稳定方案实现同类需求:
方案1:封装校验逻辑到普通断言追加全局提示
利用 GMock 提供的静态接口 testing::Mock::VerifyAndClearExpectations() 手动触发期望校验,将校验结果传入支持追加提示的普通断言即可:
// 先定义Mock期望规则 EXPECT_CALL(mock, foo()).Times(1); // 执行业务测试代码 test_target.execute(); // 手动校验Mock期望,追加自定义失败提示 EXPECT_TRUE(testing::Mock::VerifyAndClearExpectations(&mock)) << "Mock did not call foo!";
注意:该方法会一次性校验当前Mock对象上所有未验证的期望规则,适合给整个Mock对象的所有期望设置统一提示。如果需要针对单条EXPECT_CALL设置独立提示,建议使用方案2。
方案2:调用打标记+断言标记位实现单条期望自定义提示
借助Invoke动作记录指定方法的调用状态,最后通过断言标记位输出自定义提示,灵活性最高:
bool foo_called_flag = false; // 绑定期望规则,调用时修改标记位 EXPECT_CALL(mock, foo()).Times(1).WillOnce(testing::Invoke([&foo_called_flag]() { foo_called_flag = true; // 如果foo方法有返回值,在此处返回对应值即可 })); // 执行业务测试代码 test_target.execute(); // 断言标记位,可自定义任意提示内容 EXPECT_TRUE(foo_called_flag) << "Mock did not call foo!";
你还可以在Lambda中获取方法入参,实现和入参绑定的细粒度提示信息。
内容的提问来源于stack exchange,提问作者Panda
相关产品推荐
相关产品推荐

