【问题标题】:How to mock OkHttpClient request to external URL?如何模拟 OkHttpClient 对外部 URL 的请求?
【发布时间】:2020-09-08 10:14:20
【问题描述】:

我的服务中有此代码:

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 为相同的请求提供了不正确的结果)。

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

【问题讨论】:

    标签: unit-testing mocking okhttp


    【解决方案1】:

    你可以使用wiremock或者okhttp提供的MockServer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      相关资源
      最近更新 更多