Java 在junit测试中,如何从抽象类中跳过超级方法的调用?

Java 在junit测试中,如何从抽象类中跳过超级方法的调用?,java,junit,mockito,Java,Junit,Mockito,对于这种情况,编写单元测试的更好方法是什么 public abstract class Parent { public void initialize() { //some logic } } public class Child extends Parent { public void initialize(){ super.initialize() //some logic } } @Test publi

对于这种情况,编写单元测试的更好方法是什么

public abstract class Parent {

     public void initialize() {
        //some logic
     }
}
public class Child extends Parent {
    public void initialize(){
        super.initialize()
        //some logic
    }
}

@Test
public void testInitialize() {
    Child child = new Child();

    // Prevent/stub logic in super.method()
    Mockito.doNothing().when(child)./*super method called*/

    verify(...)

}
从父抽象类模拟超级方法时出现的问题,我需要阻止它的执行

我找到了非抽象父类的方法,但在我的情况下不起作用:

   Child spy = Mockito.spy(new Child());

    // Prevent/stub logic in super.method()
    Mockito.doNothing().when((Parent)spy).initialize();

Child扩展了Parent
这一事实是
Child
的一个实现细节,您的测试不应该关心它。这通常是您需要重新构造基类的信号,例如通过引入依赖项注入。

您想要的似乎是不可能的,因为调用重写的超类方法的唯一方法是从子类方法。您无法从模拟/存根执行此操作,甚至您的非抽象解决方案也无法工作(它可以编译,但不会跳过子类的执行)。如果您告诉我们为什么/为了什么测试目标需要这种执行预防,也许我们可以提供帮助?