上篇我们已经说过,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/