我的场景如下
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()
方法,因为这个方法在内部调用超类方法,我需要一些关于如何模拟SuperClass
中存在的run()
方法的帮助/代码。
4条答案
按热度按时间ibrsph3r1#
理想情况下,您应该“更喜欢组合而不是继承”。
如果你没有这个选项,你可以使用
doNothing
,当mock/spy对象中的方法被调用时,它告诉Mockito什么都不做。下面的代码示例应该会有所帮助
输出:
如果您使用super.run(),则此方法无效
qlfbtfca2#
下面是一个类的例子,它扩展了另一个类,并且它有一些其他的依赖项。在这个例子中,我将把超类调用移到另一个方法中,然后模拟超类调用方方法。
正如你在上面看到的,authenticate方法执行一些逻辑,然后调用超类的方法,所以我想模拟超类调用并测试我自己的代码块。下面是我的测试类:
hwazgwia3#
我已经在这里回答了取消超类方法的问题,但是根据你的问题,我更新了下面的代码
我发现了一种使用PowerMockito来抑制超类方法的方法。
1.使用PowerMockito.suppress方法和MemberMatcher.methodsDeclaredIn方法来隐藏父类方法
1.第二个在@PrepareForTest中添加父类
1.使用PowerMock运行您的测试类,即在您的测试类之上添加**@RunWith(PowerMockRunner.class)**。
注意:只有当超类方法不返回任何内容时,这才有效。
isr3a4wc4#
作为一种快速的方法,我只是在调用super的run的子类上添加了一个不同的代理方法,然后您就可以模拟“代理”了。