Java 直接从子类模拟抽象超类方法
我有一个扩展抽象类的子类,名为AbstractParentClass 像 此AbstractParentClass包含一个名为Java 直接从子类模拟抽象超类方法,java,mockito,powermockito,Java,Mockito,Powermockito,我有一个扩展抽象类的子类,名为AbstractParentClass 像 此AbstractParentClass包含一个名为getParentAbstractServiceMethod的方法,该方法返回一些服务类对象。该服务类有另一个名为getParentAbstractClassDomainFacade的方法,该方法返回其他非抽象的类对象,以此类推……这类似于方法链接 子类中的代码段如下所示 SessionClass userSession = (SessionClass) getParen
getParentAbstractServiceMethod
的方法,该方法返回一些服务类对象。该服务类有另一个名为getParentAbstractClassDomainFacade
的方法,该方法返回其他非抽象的类对象,以此类推……这类似于方法链接
子类中的代码段如下所示
SessionClass userSession = (SessionClass)
getParentAbstractServiceMethod().getParentAbstractClassDomainFacade().getParentAbstractClassDomainObject(SessionClass.NAME);
如何模拟
getParentAbstractServiceMethod()
方法由于这是抽象类方法,我无法实例化它并调用..我认为您应该后退一步,看看您的设计。测试(抽象类的)子类有什么意义。。。这并没有首先实现抽象方法
我认为你应该做以下几点:
A) 尽可能地测试你的基类;例如,通过创建一个仅测试子类,该子类以某种方式有意义地实现了抽象方法
B) 确保您的“真实”子类提供了抽象方法的合理实现
和提示:考虑不要将抽象放进方法名称中。它们仅在父级上是抽象的;最好的解决方案是遵循“组合优先于继承”的原则,将AbstractServiceClass转换为一个常规类,该类将当前扩展程序作为依赖项,实现一个接口,该接口提供要调用的方法
写了这篇文章后,不太可取的解决方案是使用Mockito创建抽象类的mock:
AbstractParentClass cut= Mockito.mock(AbstractParentClass.class,Mockito.CALLS_REAL_METHODS);
Mockito.when(cut.getParentAbstractServiceMethod()).thenAnswer(...);
AbstractParentClass cut= Mockito.mock(AbstractParentClass.class,Mockito.CALLS_REAL_METHODS);
Mockito.when(cut.getParentAbstractServiceMethod()).thenAnswer(...);