在Mockito中,我们一般这样验证桩的调用:
Mockito.verify(xxx, Mockito.times(1)).func1(Mockito.anyObject());
但是有时候,我们希望能验证调用的基础上,再验证这个参数,可以这么搞:
ArgumentCaptor<TypeA> typeACaptor = ArgumentCaptor.forClass(TypeA.class); Mockito.verify(xxx, Mockito.times(1)).fun1(typeACaptor.capture()); Assert.assertThat(typeACaptor.getValue().xxx(), is(yyy));
也可以
Mockito.verift(mock).mymethod(argThat(matcher));
matcher = new ArgumentMatcher<Collection<Integer>>() {
@Override
public boolean matches(Object o) {
if (!(o instanceof Collection)) {
return false;
}
Collection<Integer> coll = (Collection<Integer>) o;
if (coll.size() != 2) {
return false;
}
return coll.contains(10) && coll.contains(11);
}
}
如何只mock部分方法,可以用
Mockito.spy(XXX.class)
如何在Mockito.when时根据不同参数返回不同结果
when(mockObject.myMethod(anyString())).thenAnswer(
new Answer<String>(){
@Override
public String answer(InvocationOnMock invocation){
if ("value".equals(theProperty)){
return "result";
}
else if("otherValue".equals(theProperty)) {
return "otherResult";
}
return theProperty;
}});