Используя Robolectric 2.3-SNAPSHOT, я хочу протестировать объект, который выполнит запрос в фоновом режиме. Чтобы изолировать его, я пытаюсь высмеять возвращаемый HttpResponse без успеха через несколько часов.
Я создал проект, который любой может клонировать. Просто выполните. /gradlew проверьте https://github.com/Maragues/RobolectricDummyProject (git clone https://github.com/Maragues/RobolectricDummyProject.git)
Я пробовал
-
Robolectric.setDefaultHttpResponse(200, "my_mocked_word" );
-
MockWebServer (https://code.google.com/p/mockwebserver/)
Но тесты терпят неудачу, потому что они запрашивают реальный URL
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);
}
Код, выполняющий запрос
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;
}
Возможно, связанные вопросы
- Невозможно захватить запрос HTTP с помощью robolectric (я пробовал это без успеха. Возможно, я что-то пропустил)
- У кого-то был успех, издевательский HttpRequests с Robolectric? (я не использую eclipse)