Java Mockito:使用回调方法模拟两个返回值

Java Mockito:使用回调方法模拟两个返回值,java,junit,mockito,Java,Junit,Mockito,在mockito中,我想模拟一个返回一些值并且还必须调用回调的方法 例如,以下是服务方法: String fetchString(Callback<String> callback); String fetchString(Callback<String> callback); 正如您在上面的示例中所看到的:在返回值之前调用回调。这无法正确测试异步回调。有没有办法在返回值后调用回调方法 我知道argumentCaptor可以在这里使用,但是有没有其他方法不涉及手动调用

在mockito中,我想模拟一个返回一些值并且还必须调用回调的方法

例如,以下是服务方法:

String fetchString(Callback<String> callback);
String fetchString(Callback<String> callback);
正如您在上面的示例中所看到的:在返回值之前调用回调。这无法正确测试异步回调。有没有办法在返回值后调用回调方法

我知道argumentCaptor可以在这里使用,但是有没有其他方法不涉及手动调用回调


结合使用
doAnswer(…)
然后返回(…)

实现这一点的最佳方法是使用@talex提到的
ArgumentCaptor

我使用它的方式是:

服务方式:

String fetchString(Callback<String> callback);
String fetchString(Callback<String> callback);
stringfetchstring(回调);
JUnit测试:

ArgumentCaptor<Callback> captor = ArgumentCaptor.forClass(Callback.class);
when(mockService.fetchString(captor.capture()).thenReturn("return string");

String answer = mockService.fetchString(callbackToTest);
// callback is invoked after the service method returned the value
captor.getValue().onResult("callback string");

assertEquals("return string", answer);
verify(callbackToTest).onResult(eq("callback string"));
ArgumentCaptor captor=ArgumentCaptor.forClass(Callback.class);
when(mockService.fetchString(captor.capture()).thenReturn(“返回字符串”);
String answer=mockService.fetchString(callbackToTest);
//在服务方法返回值后调用回调
getValue().onResult(“回调字符串”);
assertEquals(“返回字符串”,应答);
验证(callbackToTest).onResult(等式(“回调字符串”));

使用
ArgumentCaptor
获取回调实例,并在需要时调用它。@Talex
ArgumentCaptor
可以使用,但只能在调用测试中的方法之后使用。我想他希望在测试中的方法仍在运行时调用该回调。他特别声明“返回值后将立即调用回调方法”。好的,但调用该模拟方法后可能会有更多代码。请描述您的用例,然后如何处理回调?