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

时间:2017-07-28 13:40:14

标签: java junit mockito

在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(..)组合的东西吗?

1 个答案:

答案 0 :(得分:2)

实现这一目标的最佳方法是使用{@ 1}},如@talex所述。

我使用它的方式是:

服务方式:

ArgumentCaptor

JUnit测试:

String fetchString(Callback<String> callback);