Mockito的参数匹配

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

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

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

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

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

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

你可能感兴趣的:(Mockito的参数匹配)