如何对从具有大量依赖性的基类派生的类进行单元测试?

时间:2010-06-19 13:14:27

标签: java unit-testing

我试图在我继承的一些Java代码中对一个类进行单元测试。

问题在于它来自一个类,该类是公司应用程序的一部分。在构建时,基类会执行各种“聪明”的东西,初始化与运行时所需的各种服务的连接。

但是对于单元测试目的,我不需要任何这些。我只需要创建一个派生类的实例,然后我就可以锻炼它。如果任何测试特别需要层次结构的一部分,我可以嘲笑它们。

那么我该如何打破这种依赖呢?

4 个答案:

答案 0 :(得分:7)

继承可能很脆弱。

继承是一项要求吗?基类正在做的所有“聪明”的东西(例如,建立连接)是依赖注入引擎通常会提供的东西。

如果你找到一种不继承并通过DI引擎满足其依赖关系的方法,你的类听起来会比测试和运行时更好。可能的?

答案 1 :(得分:3)

所以你有一个基类和一个扩展类。看看你是否可以重构扩展类以不再扩展基类,而是使用它。因此,您首次调用parent::fooBar()的位置,现在调用this.baseInstance.fooBar()。这样,您可以注入另一个baseInstance用于测试目的。

如果您确实需要扩展基类以覆盖某些内容,请将该功能提取到第三个类,并使扩展类成为代理。扩展类除了调用第三个类的方法之外别无其他。 E.g。

protected fooBar() {
    return this.realImplementation.fooBar();
}

这样,您可以测试实际的实现,而无需实例化基类。

答案 2 :(得分:1)

我们遇到了类似的问题。很多框架级别的类和依赖项。我们用DI

解决了这个问题

答案 3 :(得分:0)

我同意其他人的观点,他们认为依赖注入是长远发展的方法。作为一个短期黑客,您可以尝试引入一个“全局”标志,禁用用于测试的聪明的初始化代码。

相关问题