© Excellent backgrounds/Shutterstock.com
Open-Source-Testkit Espresso

Android UI Testing, neu erfunden (?)


„If you don’t test Android, Android tests you!“. Treffender als Valera Zakharov, Software Engineer bei Google, im Rahmen seines GTAC 2013 Talks, kann man die Relevanz von Tests – ja, dazu zählen auch UI-Tests – wohl kaum formulieren. Wie passend, dass er gleich sein eigenes Test-Kit im Gepäck hatte, das mittlerweile als Open-Source-Lösung zur Verfügung steht: Espresso

Einen verlässlichen Test in Android zu schreiben, sollte nicht länger dauern, als sich einen einfachen Espresso zu ziehen. Soweit die Theorie. In der Realität dagegen hat man bei vielen Testtools nicht selten das Gefühl, einen Double-Shot-Caramel-Sauce-Upside-Down-Single-Whip-Half-Decaf-Latte (Zitat Zakharov) zuzubereiten: extrem kompliziert und selten zweimal das gleiche Ergebnis.

Genau hier setzt das neue Testframework Espresso [1] von Google an und stellt drei grundlegende Paradigmen – „easiness“, „reliability“ und „durability“ – als wesentliche Treiber in den Fokus. Das Framework soll Entwickler mit einfachsten Mitteln in die Lage versetzen, UI-Tests zu schreiben, die immer das gleiche Ergebnis liefern und dabei auch Änderungen am UI, wie zum Beispiel geänderte Buttontexte, problemlos überleben.

Easiness

Was macht einen guten UI-Test aus? Er simuliert genau das Verhalten, das auch ein realer Benutzer an den Tag legen würde: UI-Element auswählen, Aktion auf dem Element ausführen und abschließend das erwartete Ergebnis prüfen. Genau diese drei Elemente finden sich auch im Espresso-API in Form von Floating-API-Methoden der Klasse Espresso wieder:

  • auswählen: onView(Matcher<View>)

  • ausführen: perfom(ViewAction)

  • prüfen: check(ViewAssertion)

Die folgenden beiden Codezeilen würden zum Beispiel einen Button mit der Resource-ID btn_toggle_text auswählen, ihn klicken und im Anschluss prüfen, ob sich der Inhalt eines Textfelds mit der Resource-ID txt_toggle auf den Wert der String-Ressource toggle geändert hat.

onView(withId(R.id.btn_toggle_text)).perfom(click()); onView(withId(R.id.txt_toggle_text)).check(matches(getString(R.string.toggle));

Für alle drei Methoden stellt Google gleich eine ganze Reihe vorgefertigter Helferlein zur Verfügung, die den Testautoren passende Hamcrest-Matcher [2], ViewActions oder ViewAssertions liefern. Bei den Matchern dürften vor allem die Varianten withId, withText, withContentDescription, isDisplayed, hasFocus und hasSibling von Interesse sein. Als ViewActions stehen unter anderem click, longClick, doubleClick, typeText und scrollTo zur Verfügung. Scheinbar et...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang