繁体   English   中英

Mocking 异步 HTTP 调用 Mockito

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM