4

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

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

4

2 回答 2

4

一种选择是在测试目录中创建一个 Mock_base 类和继承自它的类 Derived。现在用什么都不做的函数来模拟实际 Base 中你不感兴趣的任何实现。例如 Mock_base::Connect() 可能会返回 SUCCESS 返回码。这样您就可以在不修改源代码的情况下对 Derived:funcs() 进行单元测试。

于 2011-10-22T18:54:49.867 回答
3

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

大多数时候,功能并不打算通过继承来重用,这是一个很好的理由:您的基类实现了一些您想为客户端模拟的接口(即 Y)。可能以后这个功能也可以由其他一些类实现,并且 Y 应该能够使用那个新的、可能更好的实现。

Y有/使用X,但 Y不是X。

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

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

于 2011-10-22T18:55:40.127 回答