Wie mock-Daten beim testen mit Espresso
Wir haben ein sehr großes Android-Anwendung ohne tests. Wir leiden unter den typischen Qualität/zu lange die manuelle Regressionstests Zyklen problem.
Als eine server-side-Entwickler, die neu auf Android, möchte ich kurz auf Entwickler-tests.
Kann ich sehen, wie unit-Tests normaler Java-code mit JUnit.
Jedoch die Aktivitäten/Fragmente/Adapter sind zunehmend schwieriger.
Sah ich die Espresso-video von AGB und war beeindruckt, und beschlossen, zu verwenden.
Denen ich zu kämpfen ist, wie mein testcase mit verspottet Daten dann bestätigen Sie die Anzeige.
Ist das überhaupt möglich? Es scheint, der Espresso ist für black-box-Tests, die Grenzen Ihrer Nutzung für Entwickler deutlich (seiner Zielgruppe), da (normalerweise) black-box-Tests werden durch die QS.
Was die UI zeigt, ist abhängig von Daten, die es erhält Sie von einer Quelle wie einer Datenbank oder rest-url. Ich möchte zu bieten, Variationen in den Daten, und stellen Sie sicher, dass es korrekt angezeigt.
Nicht sicher, dies ist Espresso verwandten wirklich. Wir verwenden den Espresso in ein ziemlich großes Projekt zu werden, mit mehreren backends und mock-Daten auf verschiedene Weise. E. g. über einen Ersatz-server, gibt Konserven Antworten für bekannte Abfragen, oder einfach durch den Austausch der Kunden Seite-Abfrage-Schnittstelle-Implementierung, wo erwartet-Abfragen überprüft werden, und die Antworten definiert durch die tests zurückgegeben werden. Keine dieser Möglichkeiten umgesetzt werden, mit jedem Espresso-Funktionen.
InformationsquelleAutor FinalFive | 2014-05-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt eine Bibliothek namens mockwebserver, die Ihnen erlaubt, zu verspotten server-Antworten.
Github:
https://github.com/square/okhttp/tree/master/mockwebserver
Wenn Sie mit gradle können Sie fügen Sie die folgende Abhängigkeit:
Einige Ausschnitte, um zu helfen:
setup einen mock Server
Fügen Sie eine Beispiel-Antwort (nur das erste mal funktioniert der server genannt wird)
Starten Sie den server
Holen Sie sich die url des Servers zu ersetzen, um die normale url, die Sie verwenden.
Nun, machen Sie eine Anfrage, um alles, was nutzt die BaseURL der gleichen Weise, wie Sie es nennen möchte, nicht verspottet web-service, wenn Sie das erste mal den service rufen es zurück, die Antwort von oben. Der schwierige Teil ist, dass Sie die haben, die genaue Anzahl der MockResponses in eine Warteschlange gestellt, wie eigentlich der Anforderungen Ihrer app zu machen. Seien Sie vorsichtig mit Debuggen/Sie Ihren code, weil der debugger tatsächlich pop eine der Antworten aus, wenn du schrittweise durch den code.
Wenn Sie Probleme haben, es herauszufinden, hier ist ein java-web-Projekt (funktioniert genau das gleiche im web und nicht-web -) ich habe ein paar ein einfaches Beispiel, geschrieben in.
https://github.com/digitalbuddha/GitPullRank
+1 dies ist der Weg zu gehen IMHO. Stellen Sie sicher, dass die Initialisierung der http-client (also
Retrofit
/okhttp
/ was auch immer) zu verwenden, dieMockWebServer
s root url, wie gezeigt, in der Antwort, wie die endpoint-host vor dem Start derespresso
Testfalld.h. wenn mit
RetroFit
dannRestAdapter.Builder.setEndpoint(...);
Danke, das hat geholfen.
hi, ich am Ende, dies zu tun, aber der eigentliche webservice aufgerufen wird, und dann mock-web-server, wie sollte ich vermeiden, dass die eigentliche webservice abgerufen? Bitte unterstützen Sie. @Dori
InformationsquelleAutor FriendlyMikhail
Ich Stand vor dem gleichen problem, und konnte keine fremowork, der perfekt passt, was ich brauchte. Aber Wiremock war die eine, die zu nahe kamen.
Ich verwende es zum aufzeichnen der api-Antworten, und/oder im Wiedergabe-Modus, und wenn Sie auf Aufnahme-Modus, wenn die Anfrage wurde bereits aufgenommen, es wird nicht wieder aufnehmen. Obwohl es nicht voll auf android (noch), ich führen Sie es als standalone auf meinem Rechner, und führen Sie dann die Anwendung oder espresso-tests. Sie können auch manuell Bearbeiten oder hinzufügen von Anfragen oder Antworten.
Finden Sie viel mehr details hier
Hi,bitte poste ur Vorschlag als Antwort auf diese Frage .. stackoverflow.com/questions/38791731/...
InformationsquelleAutor juhlila