在单元测试时,如何模拟基类的非重写,虚拟/非虚拟方法?

时间:2011-10-22 18:35:12

标签: c++ unit-testing googletest gmock

如何在基类中模拟非重写的非虚拟/虚拟方法并仅测试派生类的方法? 这里的案例是: 我有一个基类X,它有连接到外部服务器的方法,并做了其他一些事情。 我有一个从Y派生的Y类。我在Y中实现了两个方法。我想对它们进行单元测试。我只担心这两个方法,我不希望调用基类实现连接到服务器等(我想要模拟这些方法,但我不想在我的派生类中重写这些方法Y并且不做任何事,因为它是生产代码)。 关于如何单独测试这些方法的任何想法/想法?

P.S:我正在使用C ++ / GTest进行开发和单元测试。

2 个答案:

答案 0 :(得分:4)

一个选项是在test目录中创建一个Mock_base类和从它继承的Derived类。现在使用不执行任何操作的函数模拟实际Base中您不感兴趣的任何实现。示例Mock_base :: Connect()可能返回SUCCESS返回码。这样,您可以在不修改源代码的情况下对Derived:funcs()进行单元测试。

答案 1 :(得分:3)

你真的很幸运,你很难做到这一点!

功能在大多数情况下不打算通过继承重用,这是一个很好的理由:你的基类实现了你想要为客户端模拟的一些接口(即Y)。可能,此功能可能稍后由其他类实现,并且Y应该能够使用 新的,可能更好的实现。

Y 拥有/使用 X,但Y 不是 X.

如果您的Y类需要使用 X的功能(连接到服务器等...),它应该聚合它,而不是从它继承。

您会注意到聚合方案允许像这样进行模拟。