Тестирование тела ответа Okhttp3 - java.lang.IllegalStateException: request == null - PullRequest
2 голосов
/ 28 мая 2019

У меня есть метод в классе, который выполняет HTTP-вызов GET для получения объекта ответа и дальнейшего использования этого объекта.Ниже представлен псевдокод:

public class ABC{
 public method abc1(){
  HttpUrl url = HttpUrl.parse("url").newBuilder()
    .addPathSegment("path1")
    .build();

  Request request = new Request.Builder().url(url).build();
  try (Response response = client.newCall(request).execute()) {
   ResponseBody responseBody = response.body();
   String body = responseBody.string();
   //other logic
  }catch (IOException e) {}

 }
}

Теперь я пишу модульный тест для проверки с различными значениями в объекте ответа (объект json).Это как показано ниже:

public class ABCTest{
 @Mock
 private OkHttpClient mockHttpClient;
 @Mock
 private Call mockCall;

 @Before
 public void initMocks() {
  MockitoAnnotations.initMocks(this);
 }

 @Test
 public void abc1Test(){

  ResponseObjectInJson responseObjectInJson = new ResponseObjectInJson(); //this is a object from my POJO class that i create in order to be received as a response

  JSONObject jsonObject = new 
  JSONObject(responseObjectInJson);

  ResponseBody body = 
  ResponseBody.create(MediaType.parse("application/json"),new 
  Gson().toJson(jsonObject));

  Response.Builder builder = new Response.Builder();
  builder.code(200);
  Response response = builder.body(body).build();

  when(mockCall.execute()).thenReturn(response);
  when(mockHttpClient.newCall(any(Request.class))).thenReturn(mockCall);
  //call the abc1() method here to see the response and behaviour
 }
}

Проблема заключается в том, что при отладке выдает исключение InvocationTargetException при построении ответа builder.body (body) .build ();

и показывает Java.lang.IllegalStateException: request == null.Я понимаю, что мне нужно установить запрос в Response.Builder, потому что, когда я оцениваю выражение builder.body (body) в отладчике, в результате он показывает заголовки и тело, но запрос равен нулю.

i.e., builder.request(//a request here)

У меня вопрос: 1. В ответе зачем нужен запрос?2. Как установить это?потому что я не могу издеваться с момента его финала.

Спасибо заранее

...