googlemock:传统代码类不从抽象类继承

时间:2014-01-13 16:48:18

标签: c++ mocking googletest

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

看起来像googlemock要求原始类继承自抽象类。然后抽象类被谷歌模拟用作父类来生成模拟。

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

所以我只想知道我对googlemock和test的理解是否正确,是否有一个选项不能创建抽象类,只是简单地使用现有的类来创建模拟。

谢谢

1 个答案:

答案 0 :(得分:0)

  

看起来googlemock需要继承原始类   一个抽象的类。然后将抽象类用作父类   谷歌模拟生成模拟。

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

  • 将被调用的成员函数必须是虚拟的(如果您不需要使用static polymorphism);
  • 将被调用的成员函数必须是公共的;
  • 模拟类的析构函数应该是虚拟的(对于简单的析构函数不是强制性的)。

注意:您可以看到,您不必担心您不需要通过模拟对象调用的成员函数。

  

在我的遗留代码中,首先我的解决方案中的原始类不是   派生自抽象类,但非抽象类和那里   它们中始终是虚函数。   此外,在大多数情况下,像D类一样有一系列父母   源自C类的C类,依此类推。

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

  

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

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