之前写了一篇关于《
用Mockito绕过DAO层直接去测试Service层》,不太全面,这次对之前的做了点补充
有的时候这个方法的返回值是通过参数返回的。比如类似于这样:
public void test(Map map){
//do something
map.put("response","success");
}
这个时候需要这样使用:
when( myMock.someMethod( any( Map.class ) ) ).thenAnswer( ( new Answer<Void>() {
@Override
public Void answer( InvocationOnMock invocation )
throws Throwable {
Object[] args = invocation.getArguments();
Map arg1 = (Map)args[0];
arg1.put("response", "failed");
return null;
}
} ) );
还有一种用法,返回参数值做为函数返回值
mockito 1.9.5之后,提供一个方便的方法来实现这个需要,在这之前可以使用一个匿名函数来返回一个answer来实现。
when(myMock.myFunction(anyString())).then(returnsFirstArg());
其中returnsFirstArg()是org.mockito.AdditionalAnswers中的一个静态方法。在这个类中还有其他的一些类似方法returnsSecondArg()returnsLastArg()
ReturnsArgumentAt(int position)
眼镜蛇