Mockito的参数匹配

上篇我们已经说过,mockito中可以控制mock对象的方法,返回我们想要的值,而无需真正执行它。
使用方法是doReturn(...).when(mockObject).invokeMethod(...params)
其中

  • doReturn() 中是你设定的返回值
  • when() 中是mock的对象
  • invokeMethod 是mock对象的具体方法
  • invokeMethod() 中的参数是调用方法的参数值

传入调用方法中的参数,可以使用Mockito中的any()来做参数的匹配,代表任意的值,还有anyString(), anyInt(), any(Class<T> clazz)等,具体可以查看org.mockito.Matchers

这里我经常用到的一个是any(Class<T> clazz),传入任意一个特定类型的对象,控制方法的返回值。那如果再细化灵活一些,要根据对象的某一个属性的取值来进行匹配呢?比如要传入Person这个对象,测试方法要根据性别来做出不同的返回,应该怎么写参数匹配?Mockito为我们提供了ArgumentMatcher的方法。具体使用如下,

doReturn(mockValue).when(mockObject).mockMethod(argThat(new ArgumentMatcher<Person>() {
    @Override
    public boolean matches(Object o) {
        return "male".equals(((Person) o).getSex());
    }
}));

参考:
https://www.planetgeek.ch/2011/11/25/mockito-argumentmatcher-vs-argumentcaptor/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容