Макет HttpResponse с робототехникой
Используя Robolectric 2.3-SNAPSHOT, я хочу протестировать объект, который будет выполнять запрос в фоновом режиме. Чтобы изолировать его, я пытаюсь высмеять возвращенный HttpResponse, но безуспешно после нескольких часов вложенных средств.
Я создал проект, который любой может клонировать. Симли беги./gradlew check https://github.com/Maragues/RobolectricDummyProject (мерзкий клон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-запрос с помощью робоэлектрика (Я попробовал это без успеха. Возможно, я что-то упустил)Кто-нибудь имел успех издеваться над HttpRequests с Robolectric? (Я не использую затмение)