У меня есть метод в классе, который выполняет 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. Как установить это?потому что я не могу издеваться с момента его финала.
Спасибо заранее