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