googlemock:遗留代码类不是从抽象类继承的

googlemock : Legacy code classes do not inherit from abstract classes

本文关键字:抽象类 继承 代码 googlemock      更新时间:2023-10-16

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

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

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

所以我只想知道我对googlemock和测试的理解是否正确,是否有一个n选项可以不创建抽象类,只使用现有的类来创建mock。

谢谢

看起来googlemock需要原始类从抽象类。然后将抽象类用作父类谷歌mock生成mock。

不,您对Google C++ Mocking Framework的理解是错误的。从抽象中继承mocking类(您试图模拟的类)是设计建议,但不是技术要求。技术要求为:

将被调用的
  • 成员函数必须是虚拟的(如果不是,则需要使用静态多态性)
  • 将被调用的成员函数必须是公共函数
  • mocking类的析构函数应该是虚拟的(对于普通析构函数来说不是必须的)

注意:正如您所看到的,您不需要担心不需要通过mock对象调用的成员函数。

在我的遗留代码中,首先,我的解决方案中的原始类不是派生自抽象类但非抽象类它们中并不总是虚拟函数。此外,在大多数情况下,有一系列的父母,比如D班从C类派生,从B类派生,依此类推

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

所以我只想知道我对谷歌模拟和测试的理解是否正确,如果有n选项不创建抽象类和只需按原样使用现有类即可创建mock。

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