Simulieren keine Netzwerk-mit Retrofit-und MockWebServer
Möchte ich simulieren, die kein Netzwerk bei Verwendung RetroFit
und MockWebServer
.
Im derzeit Tests mit Espresso
und die Versorgung der MockWebServer
s url, um die RestAdapter
bevor ich meine tests. Dies funktioniert gut für Spott server-Antworten und so, aber ich kann nicht sehen, eine einfache Möglichkeit, ein Skript für den java.net.ConnectException
Ausnahme, die ausgelöst wird, wenn ein Gerät nicht an ein Netzwerk. Ich kann sehen, dass die MockResponse ermöglicht die Drosselung simulation und so weiter, aber nicht eine benutzerdefinierte Ausnahme.
Ich weiß, ich könnte gehen, die Wurzel der Spott der eigentlichen web-api-Schnittstelle verwendet retrofit
aber ich möchte die gleiche Methode wie für meine anderen tests, wenn möglich mit MockWebServer
.
Ich mir vorstellen, ich habe nur etwas vermisst einfach 🙂
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachrüstung hat eine
retrofit-mock
Modul bietet eineMockRestAdapter
Klasse, deren Zweck es ist, zu simulieren, Netzwerk-Verzögerung und Fehler.Dies ist ein verwendet in Verbindung mit dem normalen
RestAdapter
zum erstellen einer Instanz des service. Sie können sehen, eine vollständige Beispiel in dersamples/mock-github-client/
Ordner von der repo: https://github.com/square/retrofit/tree/parent-1.9.0/retrofit-samples/mock-github-clientMockRestAdapter
bietet die folgenden APIs:setDelay
- Network round-trip-Verzögerung in Millisekunden.setVariancePercentage
- Setzen Sie die plus-oder-minus Varianz Prozentsatz der Netzwerk-round-trip-Verzögerung.setErrorPercentage
- Satz der Prozentsatz der Anrufe zucalculateIsFailure()
zurückgebentrue
.In Ihren test, können Sie rufen Sie
setErrorPercentage(100)
zu garantieren, dass ein Netzwerk-Fehler auftreten. Standardmäßig ist die Zeit für die Fehler, die geworfen werden, ist überall von 0 bis 3x die Verzögerung. Stellen Sie die Verzögerung auf 0 für sofortige Ergebnisse.klar sein, mit whe Arten von Ausnahmen Sie können hier die Unterschiede sehen:
Internet Verbindung Fehler
So können Sie in zwei Arten:
UnknownHostException - Wenn Sie nicht internet haben oder unbekannter host... um dies zu simulieren, setzen Sie den adapter ein falscher Endpunkt.
ConnectException - mockwebserver werfen kann eine timeout-exception. Sehen Sie, wie Sie es hier tun:
https://github.com/square/okhttp/tree/master/mockwebserver
Wirklich, ich weiß nicht, wie dein code ist, aber ich hoffe, dies ist nützlich
Ich weiß nicht, ob es nützlich ist, aber Sie können simulieren, eine timeout-Zeit mit MockWebServer:
Hinweis: Bitte, setzen Sie HttpClient von Ihrem code (z.B. AsyncHttpClient) mit dieser Nummer port für Testzwecke.
Was für mich gearbeitet ist, zeigen die Retrofit-URL (end-Punkt), um ein zufälliges nicht-existent host .
Ich verwendet "thisIsARandomHost.com" und bingo ich war in der Lage zu verspotten, das unbekannte host-Ausnahme.
Beispiel : setAPP_URL = "http://thisIsARandomHost.com/";
Hier , setAPP_URL ist die string-variable, die enthält meine url, die ich weitergeben, um die Nachrüstung , wenn ich will, zu verspotten unbekannte host-Ausnahme in meinen tests habe ich den url wie oben .Für alle anderen Zwecke es ist, legen Sie die gültige URL benötigt meine app.
Wie gesagt in oben genannten Antworten , MockWebServer ist eine große Bibliothek für Spott retrofit Antworten , aber Sie brauchen nicht, die Bibliothek für Spott diese Ausnahme . Für Spott alle anderen Ausnahmen, die ich empfehlen würde MockWebServer , ich benutze es viel in meinem Projekt für die Prüfung Antworten.
Hinweis : Sie können die app-url zu nichts, solange diese url existiert nicht auf dem web.