谷歌Mock和override关键字

7

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
};

这个回答解决了你的问题吗?gmock - 如何模拟带有noexcept限定符的函数 - Yksisarvinen
实际上,我在那个主题上找到了另一个问题。它是关于 noexcept 而不是 override,但答案是相同的。 - Yksisarvinen
2个回答

17
你需要升级你的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时应该优先编写新的模拟对象使用新方法。


我现在使用的是1.8版本,我想我会继续定义自己的宏,直到我们的外部依赖更新。 - nyarlathotep108

0

只需从基本纯虚类派生出您的模拟。

struct MockI : I
{
    MOCK_METHOD0(f, void()); 
};

如果只在基类中更改f的签名,您将会得到编译错误。不需要升级或手动更改gmock。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接