gpt4 book ai didi

c++ - 避免使用 Google Mock 调用基类

转载 作者:行者123 更新时间:2023-11-28 04:17:45 25 4
gpt4 key购买 nike

我正在尝试模拟图书馆提供的类。该类有一个非常昂贵的构造函数(运行大约需要 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 引入纯接口(interface)类并模拟它,而不是直接模拟 BaseClass。在这种情况下,BaseClass 的使用应该切换到新的接口(interface)使用,接口(interface)实现将包装 BaseClass 并将所需的方法调用转发给内部 BaseClass 对象.因此,无需添加用于测试目的的额外 BaseClass 构造函数。

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com