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。
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.
派生你的 mockstruct MockI : I
{
MOCK_METHOD0(f, void());
};
如果 f
的签名仅在基础 class 中更改,您将得到编译错误。无需升级或手动更改 gmock。