直接从子类模拟抽象超类方法



我有一个子类扩展抽象类名为AbstractParentClass

class Child extends AbstractParentClass

这个AbstractParentClass包含一个叫做getParentAbstractServiceMethod的方法,它返回一些服务类对象。这个服务类有另一个叫做getParentAbstractClassDomainFacade的方法,它返回一些非抽象的类对象,等等…这就像方法链。

子类中的代码片段如下

SessionClass userSession = (SessionClass)
getParentAbstractServiceMethod().getParentAbstractClassDomainFacade().getParentAbstractClassDomainObject(SessionClass.NAME);

如何模拟getParentAbstractServiceMethod()方法,因为这是抽象类方法,我不能实例化它并调用。

最好的解决方案是遵循"优先组合而不是继承"原则,并将AbstractServiceClass转换为一个常规类,该类将当前扩展程序作为依赖项实现一个接口,该接口提供要调用的方法。


写完这些之后,不太明智的解决方案是使用Mockito创建抽象类的模拟:

AbstractParentClass cut= Mockito.mock(AbstractParentClass.class,Mockito.CALLS_REAL_METHODS);
Mockito.when(cut.getParentAbstractServiceMethod()).thenAnswer(...);

我认为你应该退后一步,看看你的设计。测试(抽象类的)子类有什么意义?这首先没有实现抽象方法。

我认为你应该这样做:

A)尽可能地测试你的基类;例如,通过创建一个只测试子类,以某种方式有意义地实现抽象方法

B)确保你的"真正的"子类为你的抽象方法提供合理的实现。

提示:考虑而不是抽象放入方法名中。它们只在父级是抽象的;

相关内容

  • 没有找到相关文章

最新更新