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

如何用GoogleMock实现带变量条件的函数调用预期校验?

GoogleMock实现“变量a等于42时调用foo::bar”的断言需求

需求:确保仅当变量a的值为42时,foo类的bar()方法才被调用。

测试失败的被测代码

int a = 41;
foo.bar();

测试通过的被测代码

int a = 41;
a++;
foo.bar();

实现方案

首先需要定义foo类的Mock类(若未定义):

class MockFoo : public foo {
public:
    MOCK_METHOD(void, bar, (), (override));
};

方式一:通过Invoke在调用时检查变量值

利用Invoke传入Lambda表达式,在bar()被调用时捕获并校验a的值:

MockFoo mock;
EXPECT_CALL(mock, bar())
    .WillOnce(Invoke([&a]() {
        ASSERT_EQ(a, 42); // 调用bar()时检查a是否为42,不满足则测试失败
    }));

如果需要支持多次调用,将WillOnce替换为WillRepeatedly即可。

方式二:结合自定义断言逻辑

如果需要更清晰的失败提示,可以封装自定义断言函数:

testing::AssertionResult IsAEqualTo42(int a) {
    if (a == 42) {
        return testing::AssertionSuccess();
    }
    return testing::AssertionFailure() << "a的值是" << a << ",不符合预期的42";
}

// 测试中使用
MockFoo mock;
EXPECT_CALL(mock, bar())
    .WillOnce(Invoke([&a]() {
        EXPECT_TRUE(IsAEqualTo42(a));
    }));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:42:38