通过MOCK_METHOD模拟类时,是否需要override关键字?

问题描述 投票:0回答:1

假设我有

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

它被嘲笑的地方

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

Foo 应该只是为了单元测试而虚拟,因为在生产代码中不需要继承它。您还需要向

override
提供
MOCK_METHOD
关键字吗?

编辑:

如果需要

override
,为什么可以选择输入?为什么
override
不默认为
MOCK_METHOD

c++ googletest googlemock
1个回答
0
投票

override
从来都不是必需的。它被添加到 C++11 中,以帮助程序员清楚地传达意图,并通过在标有
override
的方法实际上没有覆盖任何内容的情况下让编译器抛出错误来捕获愚蠢的拼写错误。

MOCK_METHOD
是一个扩展为常规函数声明的宏(好吧,这个函数和另一个函数是模拟主体)。由于在任何情况下都不需要添加
override
说明符,因此您也不需要在此处这样做。我使用了不带
MOCK_METHOD
override
作为 GMock 限制的解决方法(它无法模拟返回仅移动类型的函数)。

添加

override
绝对是个好主意,因为它有助于捕获代码中的更改,而不必想知道“为什么这个模拟没有被调用”。虽然我在某种程度上同意评论者的观点,即您应该测试您执行的代码,但我也认为不应仅出于测试目的而修改代码。 “改变你的设计”的建议在 Java 中有效,无论如何你都必须支付
virtual
函数的成本,但不一定在 C++ 中。

© www.soinside.com 2019 - 2024. All rights reserved.