Ich versuche, Volley mit Robolectric arbeiten zu lassen. Ich kann sehen, dass meine HTTP-Anfrage aufgerufen wird, und parseNetworkResponse wird aufgerufen (Ich sende eine benutzerdefinierte Unterklasse von JsonRequest), aber mein Listener wird nicht aufgerufen. Irgendein Rat? Hier ist ein Codebeispiel:Robolectric zur Arbeit mit Volley
@Test
public void testTypeAheadClient() throws Exception {
Robolectric.getFakeHttpLayer().interceptHttpRequests(false);
//mRemoteRequestQueue and mCustomRequest are set up previously
mRemoteRequestQueue.add(mCustomRequest);
}
private static class CustomRequest extends JsonRequest<MyObject> {
public CustomRequest(String url,
Response.Listener<MyObject> listener,
Response.ErrorListener errorListener) {
super(Request.Method.GET, url, null, listener, errorListener);
}
@Override
protected Response<MyObject> parseNetworkResponse(NetworkResponse response) {
System.out.println("in parseNetworkResponse");
try {
MyObject myObject = new MyObject(new JSONArray(new String(response.data, "UTF-8")));
return Response.success(myObject, HttpHeaderParser.parseCacheHeaders(response));
} catch (Exception e) {
e.printStackTrace();
return Response.error(new ParseError(e));
}
}
}
Da Sie Callback verwenden, nehme ich an, dass dies eine asynchrone Bibliothek ist. Um Robolectric mit Android Async Http lib verwenden zu können, müssen Sie einen eigenen Thread-Pool einrichten. Vielleicht kann in diesem Fall die gleiche Lösung gewählt werden. https://groups.google.com/forum/#!msg/robolectric/Z3Yg04gL4hg/iwYlnvHAkO4J – Axxiss
Wenn Sie dies zur Arbeit haben, könnten Sie Ihren gesamten Testcode posten? –