Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 直接从子类模拟抽象超类方法_Java_Mockito_Powermockito - Fatal编程技术网

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

Java 直接从子类模拟抽象超类方法,java,mockito,powermockito,Java,Mockito,Powermockito,我有一个扩展抽象类的子类,名为AbstractParentClass 像 此AbstractParentClass包含一个名为getParentAbstractServiceMethod的方法,该方法返回一些服务类对象。该服务类有另一个名为getParentAbstractClassDomainFacade的方法,该方法返回其他非抽象的类对象,以此类推……这类似于方法链接 子类中的代码段如下所示 SessionClass userSession = (SessionClass) getParen

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

此AbstractParentClass包含一个名为
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(...);