如何使用Mockito或任何其他relavent Java框架模拟超类方法 [英] How to mock super class method using Mockito or anyother relavent java framework
问题描述
我的情况如下
class SuperClass{
public void run(){
System.out.println("I am running in Super class");
}
}
class ChildClass extends SuperClass{
public void childRunner(){
System.out.println("Step 1");
System.out.println("Step 2");
**run();**
System.out.println("Last Step");
}
}
现在,我想模拟ChildClass
的childRunner()
方法,并且由于该方法内部调用了超类方法,因此我需要一些有关如何模拟run()
方法的帮助/代码. ChildClass
的childRunner()
方法.
Now I want to mock the childRunner()
method of ChildClass
and since this method internally calls the super class method, i need some help/piece of code on how to mock the run()
method which is present in the childRunner()
method of ChildClass
.
推荐答案
理想情况下,您应该主张继承优先于组成".
Ideally, you should "favor composition over inheritance".
如果没有此选项,则可以使用doNothing
,它基本上告诉Mockito在调用模拟/间谍对象中的方法时不执行任何操作. 此处
If you don't have this option you could use doNothing
which basically tells Mockito to do nothing when a method in a mock/spy object is called. This was also discussed here
以下代码示例应有所帮助
Following code example should help
@Test
public void tst() {
ChildClass ch = Mockito.spy(new ChildClass());
Mockito.doNothing().when((SuperClass)ch).run();
ch.childRunner();
}
class SuperClass{
public void run(){
System.out.println("I am running in Super class");
}
}
class ChildClass extends SuperClass{
public void childRunner(){
System.out.println("Step 1");
run();
System.out.println("Last Step");
}
}
输出:
Step 1
Last Step
如果您使用super.run();这是行不通的
In case you use super.run(); this won't work
这篇关于如何使用Mockito或任何其他relavent Java框架模拟超类方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!