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
的一个实现细节,您的测试不应该关心它。这通常是您需要重新构造基类的信号,例如通过引入依赖项注入。您想要的似乎是不可能的,因为调用重写的超类方法的唯一方法是从子类方法。您无法从模拟/存根执行此操作,甚至您的非抽象解决方案也无法工作(它可以编译,但不会跳过子类的执行)。如果您告诉我们为什么/为了什么测试目标需要这种执行预防,也许我们可以提供帮助?