Mockito如何只模拟超类方法的调用我在一些测试中使用Mockito。我有以下课程:class BaseService {
public void save() {...} }public Childservice extends BaseService {
public void save(){
//some code
super.save();
} }我想只模拟第二个调用(super.save)ChildService。第一个调用必须调用真正的方法。有没有办法做到这一点?
3 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
如果你真的没有重构的选择,你可以在超级方法调用中模拟/存根所有内容,例如
class BaseService {
public void validate(){
fail(" I must not be called");
}
public void save(){
//Save method of super will still be called.
validate();
}
}
class ChildService extends BaseService{
public void load(){}
public void save(){
super.save();
load();
}
}
@Test
public void testSave() {
ChildService classToTest = Mockito.spy(new ChildService());
// Prevent/stub logic in super.save()
Mockito.doNothing().when((BaseService)classToTest).validate();
// When
classToTest.save();
// Then
verify(classToTest).load();
}
呼如林
TA贡献1798条经验 获得超3个赞
考虑将ChildService.save()方法中的代码重构为不同的方法,并测试新方法而不是测试ChildService.save(),这样就可以避免对super方法进行不必要的调用。
例:
class BaseService {
public void save() {...} }public Childservice extends BaseService {
public void save(){
newMethod();
super.save();
}
public void newMethod(){
//some codes
}}添加回答
举报
0/150
提交
取消
