mockito异步请求如何mock
时间: 2024-06-09 21:09:14 浏览: 165
Mockito 可以 mock 异步请求,以下是其中一种方式:
假设我们有一个异步请求的接口:
```java
public interface AsyncRequest {
void makeRequest(String url, Callback callback);
}
```
其中,`Callback` 是回调接口,用于处理异步请求的结果:
```java
public interface Callback {
void onSuccess(String result);
void onFailure(Throwable throwable);
}
```
我们想要 mock 这个接口,可以使用 Mockito 的 `Answer` 接口,来模拟异步请求的结果。
```java
@Test
public void testAsyncRequest() {
AsyncRequest mockRequest = Mockito.mock(AsyncRequest.class);
// 创建一个 ArgumentCaptor 对象,用于捕获回调接口的参数
ArgumentCaptor<Callback> callbackCaptor = ArgumentCaptor.forClass(Callback.class);
// 模拟异步请求
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
String url = invocation.getArgument(0);
Callback callback = invocation.getArgument(1);
// 模拟请求过程
new Thread(() -> {
String result = "Hello World";
callback.onSuccess(result);
}).start();
return null;
}
}).when(mockRequest).makeRequest(anyString(), callbackCaptor.capture());
// 发起异步请求
mockRequest.makeRequest("https://example.com", callbackCaptor.getValue());
// 验证回调接口是否被调用
verify(callback, timeout(1000)).onSuccess("Hello World");
}
```
在这个例子中,我们使用了 `doAnswer` 方法,来模拟异步请求的过程。在这个方法中,我们使用了一个 `Thread` 对象,来模拟异步请求的过程。在请求完成后,我们调用了回调接口的 `onSuccess` 方法,并传入一个字符串参数。
在验证的时候,我们使用了 `timeout` 方法,来设置超时时间。这是因为异步请求不是立即返回结果的,我们需要等待一段时间后,再验证回调接口是否被调用。
阅读全文