[英]Mocking Async HTTP Calls with Mockito
我正在使用 OkHTTP 进行异步 HTTP 调用,并尝试使用 Mockito 来模拟行为:
这是源代码的缩短版本:
okHttpClient
.newCall(<some Request object>)
.enqueue(<some Callback object>);
这是我试图模拟这种行为的方式:
OkHttpClient httpClientMock = mock(OkHttpClient.class, Answers.RETURNS_DEEP_STUBS);
doAnswer(invocation -> {
((Callback) invocation.getArgument(0)).onResponse(remoteResponse);
return null;
}).when(httpClientMock).newCall(any(Request.class)).enqueue(any(Callback.class));
但是当我运行测试时,我得到了 NullPointerException 和 InvalidUseOfMatchersException。 当我阅读 InvalidUseOfMatchersExceptions 中的说明时,我注意到我使用的模式非常接近他们建议的模式之一:
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
不知道我在这里做错了什么,我对 Mockito 的经验相当有限。
有 2 个方法调用,一个是 newCall,它返回一个 Call object,然后是一个返回 void 的入队方法。 我认为您也应该对 Call 进行模拟。
Call mockCall = mock(Call.class); // Creating a mock for Call class
doReturn(mockCall).when(httpClientMock).newCall(any(Request.class)); // The mock call object is returned on newCall method invocation
doAnswer(invocation -> {
((Callback) invocation.getArgument(0)).onResponse(remoteResponse);
return null;
}).when(mockCall).enqueue(any(Callback.class));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.