考虑
Java中的以下简单类层次结构
class Foo {
protected void someMethod(Bar bar) {
...
}
protected void someOtherMethod(Baz baz) {
...
}
}
class EnhancedFoo extends Foo {
@Override
protected void someMethod(Bar bar) {
...
}
}
我现在开始为这两个类编写JUnit单元测试.由于方法someMethod的契约对于这两个类都是相同的,因此对于这两个类,我需要基本上完全相同的测试方法(关于someMethod方法),这导致代码重复.使用多个覆盖方法为更丰富的类层次结构执行此操作时,感觉继承对可测试性不利.
此外,即使someFther方法someOtherMethod没有在ExtendedFoo中重写,我需要包含相关的ExtendedFoo测试,因为这仍然是合同,这个扩展的类和单元测试应该测试它.
是否有其他一些在Java中组织层次结构的方法更适合可测试性?是否有一些JUnit构造可以帮助缓解这个问题?