Unit testing 如何将OkHttpClient请求模拟为外部URL?
我的服务中包含以下代码:Unit testing 如何将OkHttpClient请求模拟为外部URL?,unit-testing,mocking,okhttp,Unit Testing,Mocking,Okhttp,我的服务中包含以下代码: public String requestValue() { Call call = okHttpClient.newCall(new Request.Builder().url("external-url").build()); Response response = call.execute(); return response.body().string(); } 如何在Junit测试中模拟此调用的结果 public void testRequest
public String requestValue() {
Call call = okHttpClient.newCall(new Request.Builder().url("external-url").build());
Response response = call.execute();
return response.body().string();
}
如何在Junit测试中模拟此调用的结果
public void testRequestValue() {
// TODO mock http response
String result = myService.requestValue();
assertEquals("value", result);
}
注意:使用Mockito的朴素解决方案不起作用Mockito.eq
不会在Request
对象上触发(似乎Request.equals
为相同的请求提供了不正确的结果)
您可以使用或提供的MockServer
Request request = new Request.Builder().url("external-url").build();
Response response = new Response.Builder()
.request(request)
.protocol(Protocol.HTTP_2)
.code(200)
.message("")
.body(ResponseBody.create("value", MediaType.get("application/json")))
.build();
Call call = Mockito.mock(Call.class);
Mockito.when(call.execute()).thenReturn(response);
Mockito.when(okHttpClientMock.newCall(Mockito.eq(request))).thenReturn(call);