Using Robolectric 2.3-SNAPSHOT, I want to test an object that'll execute a request in the background. In order to isolate it, I'm trying to mock the HttpResponse returned, without success after some hours invested.
I've created a project that anyone can clone. Simly run ./gradlew check https://github.com/Maragues/RobolectricDummyProject (git clone https://github.com/Maragues/RobolectricDummyProject.git)
I've tried
Robolectric.setDefaultHttpResponse(200, "my_mocked_word");
MockWebServer (https://code.google.com/p/mockwebserver/)
But the tests fail because they query the real 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); }
The code executing the request
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; }
Possibly related questions
- Can't capture HTTP request with robolectric (I've tried that without success. Perhaps I'm missing something)
- Anyone had success mocking HttpRequests with Robolectric? (I'm not using eclipse)