我正在尝试模拟库提供的类。该类有一个非常昂贵的构造函数(需要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/