如何使用 Mockito 或任何其他相关的 Java 框架来模拟超类方法
我的场景如下
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()
方法,因为这个方法在内部调用超类方法,我需要一些帮助/一段代码来说明如何模拟 ChildClass
的 childRunner()
方法中存在的 run()
方法.
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 在调用 mock/spy 对象中的方法时什么都不做.这也讨论过这里
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
相关文章