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