Android Unit Test mit Retrofit2 und Mockito oder Robolectric
Kann ich testen echte Antwort von retrofit2beta4? Brauche ich Mockito oder Robolectic?
Habe ich nicht Aktivitäten in meinem Projekt wird es sein, eine Bibliothek, und ich brauche zum testen ist der server antwortet.
Jetzt habe ich einen solchen code und stecken...
@Mock
ApiManager apiManager;
@Captor
private ArgumentCaptor<ApiCallback<Void>> cb;
@Before
public void setUp() throws Exception {
apiManager = ApiManager.getInstance();
MockitoAnnotations.initMocks(this);
}
@Test
public void test_login() {
Mockito.verify(apiManager)
.loginUser(Mockito.eq(login), Mockito.eq(pass), cb.capture());
//cb.getValue();
//assertEquals(cb.getValue().isError(), false);
}
Kann ich machen gefälschte Antwort, aber ich brauche, um zu testen, real. Ist es der Erfolg? Ist es der Körper der richtige?
Können Sie mir helfen mit dem code?
InformationsquelleAutor der Frage AndrewS | 2016-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es in der Regel nicht eine gute Idee, um zu testen, real-server anfordert. Sehen in diesem blog-post für eine interessante Diskussion über das Thema. Laut dem Autor, mit dem richtigen server ist ein problem, denn:
Können Sie vermeiden, all die Probleme, die oben mit einem mock-server wie OkHttp ist MockWebServer zu simulieren Reale response-Ergebnisse. Zum Beispiel:
Wenn Sie brauchen, um zu simulieren, Netzwerk-Verzögerungen haben, können Sie Ihre Antwort wie folgt:
Alternativ können Sie
MockRetrofit
undNetworkBehavior
zu simulieren, API-Antworten. Sehen hier ein Beispiel, wie es zu benutzen.Schließlich, wenn Sie wollen einfach nur testen Sie Ihr Retrofit-Service, die einfachste wäre das erstellen eine mock-version, die strahlt mock Ergebnisse für Ihre tests. Zum Beispiel, wenn Sie die folgenden
GitHub
service-Schnittstelle:Können Sie dann erstellen Sie die folgende
MockGitHub
für Ihre tests:Dann können Sie die
MockGitHub
auf Ihre tests simulieren die Arten von Antworten, die Sie suchen. Für das vollständige Beispiel finden Sie in den Implementierungen der SimpleService und SimpleMockService für diese Retrofit-Beispiel.Having said all dies, wenn Sie absolut müssen eine Verbindung zum eigentlichen server, können Sie festlegen, Retrofit-arbeiten synchron mit einem benutzerdefinierten
ImmediateExecutor
:Dann gilt es auf die
OkHttpClient
verwenden Sie beim Bau die Nachrüstung:InformationsquelleAutor der Antwort Ricardo Lage
Die Antwort ist zu einfach, als ich erwartet hatte:
Verwendung von CountDownLatch macht Ihren test warten, bis Sie anrufen countDown()
InformationsquelleAutor der Antwort AndrewS
Es sei denn, Sie testen, QA-server-API, es ist eine schlechte Idee, aus mehreren Gründen.
Daten
gültige Anforderung
Der beste Weg, um Mockito, oder Verspotten, Ihre Antworten
Auch, wenn Sie müssen testen Sie Ihre API-Produktion, testen Sie es einmal und fügen Sie @Ignore-annotation. Auf diese Weise sind Sie nicht die ganze Zeit laufen und nicht spam Ihre server mit fake-Daten und Sie können es verwenden, Wann immer Sie fühlen die api nicht richtig verhält.
InformationsquelleAutor der Antwort Akshay