Google 模拟并覆盖关键字

Google Mock and override keyword

Google Mock 中是否有宏通过将 override 关键字附加到宏替换来确保编译时检查 f() 的签名:

struct I
{
    virtual void f() = 0;
};

struct MockI
{
    MOCK_METHOD0(f, void()); // this will define another function if f signature changes 
                             // leading to weird runtime test failures
};

您需要将 GoogleMock 升级到 1.10.x 版本才能执行此操作(除非您想自己修改库)。

1.10 版本有新的宏 MOCK_METHOD 可以使用任何函数说明符 (const, noexcept, override, final, ...)

MOCK_METHOD 宏用法:

struct MockI: public I
{
    MOCK_METHOD(void, f, (), (override));
};

旧宏 MOCK_METHODx 仍然可以使用,但是在使用 1.10.x

时应该更喜欢使用新方法编写新模拟

简单地从基础纯虚拟 class.

派生你的 mock
struct MockI : I
{
    MOCK_METHOD0(f, void()); 
};

如果 f 的签名仅在基础 class 中更改,您将得到编译错误。无需升级或手动更改 gmock。