c++ 当通过MOCK_METHOD模拟一个类时,是否需要override关键字?

ac1kyiln  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(97)

假设我有

class Foo {
 public:
    VIRTUAL_FOR_TEST void bar(int i);
};

字符串
在那里,它被嘲笑,

class FooMock : public Foo {
 public:
    MOCK_METHOD(void, bar, (int), ());
};


Foo应该只是为了单元测试而虚拟的,因为在生产代码中不需要继承它。你还需要为MOCK_METHOD提供override关键字吗?
编辑:
如果需要override,为什么输入是可选的?为什么override不默认为MOCK_METHOD

pbpqsu0x

pbpqsu0x1#

override从来不是必需的。它是在C11中添加的,以帮助程序员清楚地传达意图,并通过使编译器在标记为override的方法实际上没有覆盖任何东西时抛出错误来捕捉愚蠢的错别字。
MOCK_METHOD是一个扩展为常规函数声明的宏(这个函数和另一个函数是mock body)。由于在任何情况下都不需要添加override说明符,这里也不要求您这样做。我使用MOCK_METHOD而不使用override作为GMock限制的解决方案(它不能模仿一个函数,返回一个只移动类型早在一天)。
添加override绝对是一个好主意,因为它有助于捕获代码中的更改,而不必怀疑“为什么这个mock没有被调用”。虽然我有点同意评论者的观点,即您应该测试您执行的代码,我也认为不应该仅仅为了测试而修改代码。建议“改变你的设计”在Java中,无论如何你都必须付出virtual函数的代价,但在C
中不一定如此。

相关问题