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

时间:2016-10-17 08:00:41

标签: java mockito powermockito

我有一个子类,它扩展了名为 AbstractParentClass 的抽象类 喜欢

class Child extends AbstractParentClass

此AbstractParentClass包含一个名为getParentAbstractServiceMethod的方法,它返回一些服务类对象。该服务类有另一个名为getParentAbstractClassDomainFacade的方法,它返回一些非抽象的其他类对象,等等......这就像方法链一样。

Child类中的代码段如下

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

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

2 个答案:

答案 0 :(得分:1)

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

<小时/> 写完这个不太可取的解决方案是使用Mockito创建一个Abstract类的模拟:

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

答案 1 :(得分:0)

我认为你应该退一步看看你的设计。测试子类(抽象类)的重点是什么......首先没有实现抽象方法。

我认为您应该执行以下操作:

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

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

提示:考虑 abstract 放入方法名称中。它们只是父级的抽象;不是那些实施它们的孩子。