我有一个子类,它扩展了名为 AbstractParentClass 的抽象类 喜欢
class Child extends AbstractParentClass
此AbstractParentClass包含一个名为getParentAbstractServiceMethod
的方法,它返回一些服务类对象。该服务类有另一个名为getParentAbstractClassDomainFacade
的方法,它返回一些非抽象的其他类对象,等等......这就像方法链一样。
Child类中的代码段如下
SessionClass userSession = (SessionClass)
getParentAbstractServiceMethod().getParentAbstractClassDomainFacade().getParentAbstractClassDomainObject(SessionClass.NAME);
如何模拟getParentAbstractServiceMethod()
方法,因为这是抽象类方法我无法实例化它并调用..
答案 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 放入方法名称中。它们只是父级的抽象;不是那些实施它们的孩子。