为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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();
    }


查看完整回答
反对 回复 2019-08-28
?
呼如林

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
    }}


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 1274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信