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

无法修改基类A/B时,如何解决GMock重写value方法失效问题?

问题原因

核心问题是A类的value()方法不是虚函数,C++里非虚函数的调用是静态绑定的——编译阶段就确定了B的print()里调用的value()是A的实现,哪怕M类定义了同名的value(),也不会被多态调用。

解决方案

既然不能修改A和B的代码,我们可以在M类中重写print()方法,让它直接调用自己mock的value(),绕开B原有的调用逻辑:

class M : public B {
public:
    MOCK_METHOD(std::string, value, ());
    
    // 重写print方法,替换B的实现
    void print(std::string s) override {
        std::cout << this->value() << s << std::endl;
    }
};
生效逻辑

重写后的print()会直接调用M类自身的value()(也就是你mock的版本),不再走B中调用A的value()的流程。测试时EXPECT_CALL的mock会正常生效,输出会变成M: test mock。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:25:30