【问题标题】:googlemock : Legacy code classes do not inherit from abstract classesgooglemock:遗留代码类不继承自抽象类
【发布时间】:2014-01-13 16:48:18
【问题描述】:

我正在研究使用 VS 8.0 的非托管 C++ 应用程序的不同测试框架

看起来 googlemock 要求原始类继承自抽象类。然后抽象类被 google mock 用作父类来生成 mock。

在我的遗留代码中,首先我的解决方案中的原始类不是从抽象类派生的,而是从非抽象类派生的,并且它们中并不总是有虚函数。此外,在大多数情况下,有一个父链,例如 D 类派生自 C 类,C 类派生自 B 类等等。因此,在这种情况下创建接口将更加复杂,因为在模拟对象中需要实现所有虚拟功能。

所以我只想知道我对 googlemock 和 test 的理解是否正确,以及是否可以选择不创建抽象类而直接使用现有类来创建模拟。

谢谢

【问题讨论】:

    标签: c++ mocking googletest


    【解决方案1】:

    看起来 googlemock 需要从原始类继承 一个抽象类。然后抽象类被用作父类 google mock 生成 mocks。

    不,您对Google C++ Mocking Framework 的理解是错误的。从抽象继承模拟类(您尝试模拟的类)是design suggestion,但不是技术要求。技术要求是:

    • 要调用的成员函数必须是虚函数(如果不是,则需要使用static polymorphism);
    • 将被调用的成员函数必须是公共的;
    • 模拟类的析构函数应该是虚拟的(对于普通析构函数不是必需的)。

    注意:如您所见,您无需担心不需要通过模拟对象调用的成员函数。

    在我的遗留代码中,首先我的解决方案中的原始类不是 派生自抽象类但非抽象类和那里 它们并不总是虚函数。 此外,在大多数情况下,像 D 类这样的父母链是 派生自 Class C 派生自 Class B 等等。

    这不是问题,而您不需要调用非虚拟成员函数。

    所以我只想知道我对googlemock和test的理解是不是 正确,如果有不创建抽象类的选项,并且 只需按原样使用现有的类来创建模拟。

    正如我所说,您不必担心基本抽象类,但无论如何,如果您现有的代码不满足您需要修改它的要求。有时对某些人来说这是不可接受的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多