我正在尝试模拟库提供的类。该类有一个非常昂贵的构造函数(需要30秒钟才能运行),我希望避免调用它。实际的类功能都不需要工作,我只需要一个模拟对象即可查看是否调用了正确的方法。

class MockClass : public BaseClass
{
  public:
    MockClass();

    MOCK_CONST_METHOD1(methodA, void(const typeA a));
    MOCK_CONST_METHOD1(methodB, void(int b));
    MOCK_CONST_METHOD3(methodC, bool(double c, double d, int e));
};


我想要类似上面的设置,但是它仍然尝试调用默认构造函数。

我该如何解决?

最佳答案

要构造MockClass对象-无论如何,应调用BaseClass构造函数之一。

如果BaseClass具有模拟场景可以接受的另一个(用户定义)构造函数-显式调用它:

class MockClass : public BaseClass
{
  public:
    MockClass() : BaseClass(/* c-tor args */) {}

    // ...
};


如果没有这样的构造函数-您将需要添加它(可以使其受到保护,使其不能在常规BaseClass使用上下文中访问)。
[编辑:由于它是一个库类-添加构造函数很可能不是一个选择]

另一个可能的方向是为BaseClass引入纯接口类并对其进行模拟,而不是直接模拟BaseClass。在这种情况下,应将BaseClass的用法切换为新的接口用法,并且接口实现将包装BaseClass并将所需的方法调用转发给内部BaseClass对象。因此,无需添加用于测试目的的其他BaseClass构造函数。

关于c++ - 避免使用Google Mock调用基类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56231636/

10-11 23:08