使用MOCK_METHOD模拟类时是否需要override关键字?
关于Google Mock中MOCK_METHOD是否需要添加override关键字的问题
假设存在如下类:
class Foo { public: VIRTUAL_FOR_TEST void bar(int i); };
该类通过如下方式被模拟:
class FooMock : public Foo { public: MOCK_METHOD(void, bar, (int), ()); };
其中Foo仅为单元测试需求设置虚函数,生产代码无需继承。请问是否仍需为MOCK_METHOD添加override关键字?
补充疑问:若确实需要该关键字,为何它是可选输入,MOCK_METHOD不默认添加?
问题解答
是否需要添加override关键字?
需要。尽管Foo的虚函数仅为测试场景设置,但在测试代码中FooMock继承自Foo并覆写bar方法时,override关键字能触发编译器的签名检查:一旦你写错了参数类型、返回值或者函数名,编译器会直接报错,避免因签名不匹配导致的「意外隐藏父类函数」而非「正确覆写」的问题,这能帮你提前排查测试代码中的低级错误。为什么MOCK_METHOD不默认添加override?
- 兼容性需求:Google Mock需要兼容C11之前的旧标准,而
override是C11才引入的关键字。如果默认添加,在不支持C++11的编译环境中代码会直接编译失败,框架必须兼顾这些旧场景。 - 场景灵活性:虽然大部分模拟场景是覆写虚函数,但框架也支持模拟非虚函数的情况(比如通过模板或其他方式),此时
override关键字是无效的。把override设为可选参数,能让用户根据实际场景选择是否添加,保证框架的通用性。
内容的提问来源于stack exchange,提问作者davidj361
相关产品推荐
相关产品推荐

