在不同的Maven模块中测试多种实现?

时间:2018-12-10 08:03:40

标签: java maven unit-testing junit

理论场景:

让我们说您有一个带有许多接口的Core-Modul,以及使用这些接口的一些通用实现,但它们不从这些接口继承,也没有从这些接口继承的多个模块继承。

类似的事情:


核心模块

| -接口A
| -InterfaceB
| -...
| -InterfaceZ
| -impl
| -GenericImplementationA
| -GenericImplementationB



ModuleA

| -SpecificImplementationOfInterfaceA
| -SpecificImplementationOfInterfaceB
| -...
| -SpecificImplementationOfInterfaceZ


...


ModuleZ

| -OtherSpecificImplementationOfInterfaceA
| -OtherSpecificImplementationOfInterfaceB
| -...
| -OtherSpecificImplementationOfInterfaceZ


我的问题是,编写“通用”测试的最佳方法是什么,这些测试使用这些接口,但对于具有特定实现的每个模块都将执行。此外,我想为核心模块中的那些通用类编写测试,但是我没有这些类中使用的接口的实现。

我想到的一些可能的解决方案是:

  • (A)在核心模块中编写通用测试,并为每个模块和每个特定实现创建一个从通用测试继承并通过特定实现的测试类。
  • (B)创建一个从核心模块和每个特定模块继承的新测试模块,在其中编写通用测试并使用Parameterized junit tests

解决方案A的缺点是您需要太多冗余类,这些冗余类仅从通用测试继承并通过特定的特定实现。

在这种情况下,是否有任何好的做法示例?

1 个答案:

答案 0 :(得分:2)

单元测试的主要目的是

  • 测试被测设备的所有方面
  • 帮助您稍后快速识别/调试问题。

从那里来:当然,人们不应该对单元测试代码的质量感到粗心,但是单元测试很重要,可以针对相应的生产类别进行定制/严格。

换句话说:当A具有某些功能X时,则ATest应该测试该X。当您具有某些B extends A时,则要对B具有“在A之上”的所有事物进行单元测试。

从这个角度来看,您宁愿将目光投向第二个选项。您会看到,对您的一个特殊模块的测试失败时,您希望尽快解决该问题。您不想先跳到某个基础测试类,以读取与子类中的失败无关的100行代码。

换句话说:一个测试类应该尽可能地独立,您对使用继承来避免代码重复非常谨慎...