Mock HttpResponse com Robolectric
Usando o Robolectric 2.3-SNAPSHOT, quero testar um objeto que executará uma solicitação em segundo plano. Para isolá-lo, estou tentando zombar do retorno do HttpResponse, sem sucesso após algumas horas investidas.
Eu criei um projeto que qualquer um pode clonar. Simly run./gradlew check https://github.com/Maragues/RobolectricDummyProject (clone githttps://github.com/Maragues/RobolectricDummyProject.git)
eu tentei
Robolectric.setDefaultHttpResponse (200, "my_mocked_word");
MockWebServer (https://code.google.com/p/mockwebserver/)
Mas os testes falham porque consultam o URL real
private static final String MOCKED_WORD = "MOCKED";
@Test
public void mockedRequestUsingMockServer() throws Exception {
mMockWebServer.enqueue(new MockResponse().setBody(MOCKED_WORD));
mMockWebServer.play();
Robolectric.getFakeHttpLayer().interceptHttpRequests(false);
Robolectric.getFakeHttpLayer().interceptResponseContent(false);
String result = request.loadDataFromNetwork();
assertEquals(MOCKED_WORD, result);
}
@Test
public void mockedRequestUsingRobolectric() throws Exception {
Robolectric.setDefaultHttpResponse(200, MOCKED_WORD);
String result = request.loadDataFromNetwork();
assertEquals(MOCKED_WORD, result);
}
O código que executa a solicitação
public String loadDataFromNetwork() throws Exception {
// With Uri.Builder class we can build our url is a safe manner
Uri.Builder uriBuilder = Uri.parse("http://robospice-sample.appspot.com/reverse").buildUpon();
uriBuilder.appendQueryParameter("word", word);
String url = uriBuilder.build().toString();
HttpURLConnection urlConnection = (HttpURLConnection) new URL(url)
.openConnection();
String result = IOUtils.toString(urlConnection.getInputStream());
urlConnection.disconnect();
return result;
}
Perguntas possivelmente relacionadas
Não é possível capturar a solicitação HTTP com robolectric (Eu tentei isso sem sucesso. Talvez eu esteja perdendo alguma coisa)Alguém teve sucesso zombando de HttpRequests com Robolectric? (Eu não estou usando eclipse)