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
提交
取消
