Mock HttpResponse mit Robolectric
Mit Robolectric 2.3-SNAPSHOT möchte ich ein Objekt testen, das eine Anforderung im Hintergrund ausführt. Um es zu isolieren, versuche ich, die zurückgegebene HttpResponse zu verspotten, ohne Erfolg, nachdem einige Stunden investiert wurden.
Ich habe ein Projekt erstellt, das jeder klonen kann. Einfach laufen./gradlew überprüfen https://github.com/Maragues/RobolectricDummyProject (Git-Klonhttps://github.com/Maragues/RobolectricDummyProject.git)
ich habe es versucht
Robolectric.setDefaultHttpResponse (200, "my_mocked_word");
MockWebServer (https://code.google.com/p/mockwebserver/)
Die Tests schlagen jedoch fehl, da die tatsächliche URL abgefragt wird
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);
}
Der Code, der die Anforderung ausführt
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;
}
Möglicherweise verwandte Fragen
HTTP-Anfrage kann nicht mit robolectric erfasst werden (Ich habe das ohne Erfolg versucht. Vielleicht fehlt mir etwas)Hat jemand Erfolg gehabt, HttpRequests mit Robolectric zu verspotten? (Ich benutze keine Eclipse)