gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:30:28 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Calling callbacks with Mockito

(4 个回答)


4年前关闭。




在 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(..) ?

最佳答案

实现此目的的最佳方法是使用 ArgumentCaptor ,正如@talex 所提到的。

我使用它的方式是:

服务方式:

String fetchString(Callback<String> callback);

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"));

关于java - Mockito:使用回调方法模拟两个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45375039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com