Mockito如何只模拟超类方法的调用

Mockito如何只模拟超类方法的调用

我在一些测试中使用Mockito。

我有以下课程:

class BaseService {  
    public void save() {...}  }public Childservice extends BaseService {  
    public void save(){  
        //some code  
        super.save();
    }  }

我想只模拟第二个调用(super.saveChildService。第一个调用必须调用真正的方法。有没有办法做到这一点?


三国纷争
浏览 1331回答 3
3回答

缥缈止盈

如果你真的没有重构的选择,你可以在超级方法调用中模拟/存根所有内容,例如    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();     }

呼如林

考虑将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     }}
打开App,查看更多内容
随时随地看视频慕课网APP