在mockito中,我想模拟一个返回一些值的方法,并且还要调用一个回调
例如,这是服务方法:
String fetchString(Callback<String> callback);
我希望在调用回调之前发生返回值。我查看了使用Mockito.doAnswer(..)
,但似乎无法弄清楚如何使该方法在return语句之后调用回调。例如:
when(mockService.fetchString(any(Callback.class)).thenAnswer(
new Answer<String>() {
String answer(InvocationOnMock invocation) {
((Callback<String>) invocation.getArguments()[0]).onResult("callback string");
return "return string";
}
});
正如您在上面的示例中所看到的:在返回值之前调用回调。这不会正确测试异步回调。有没有办法在返回值后调用回调方法?
我知道可以在这里使用argumentCaptor,但有没有其他方法不涉及手动调用回调?
是doAnswer(..)
和thenReturn(..)
组合的东西吗?
答案 0 :(得分:2)
实现这一目标的最佳方法是使用{@ 1}},如@talex所述。
我使用它的方式是:
服务方式:
ArgumentCaptor
JUnit测试:
String fetchString(Callback<String> callback);