UI-Tests automatisieren

Wenn Sie die Nutzerinteraktionen testen, können Sie dafür sorgen, dass Nutzer keine unerwarteten Ergebnisse erhalten oder die Nutzung Ihrer App nicht frustrierend ist. Sie sollten sich angewöhnen, UI-Tests (User Interface) zu erstellen, wenn Sie prüfen möchten, ob die Benutzeroberfläche Ihrer App richtig funktioniert.

Bei einem Ansatz für UI-Tests führt ein menschlicher Tester eine Reihe von Nutzeraktionen in der Ziel-App aus und prüft, ob sie richtig funktioniert. Dieser manuelle Ansatz kann jedoch zeitaufwendig und fehleranfällig sein. Effizient ist es, Ihre UI-Tests so zu schreiben, dass Nutzeraktionen automatisiert ausgeführt werden. Mit dem automatisierten Ansatz können Sie Ihre Tests schnell und zuverlässig wiederholen.

Bei UI-Tests wird eine App (oder ein Teil davon) gestartet, dann werden Nutzerinteraktionen simuliert und schließlich wird geprüft, ob die App richtig reagiert hat. Es handelt sich um Integrationstests, die von der Überprüfung des Verhaltens einer kleinen Komponente bis hin zu einem großen Navigationstest reichen, der einen gesamten Nutzerfluss durchläuft. Sie sind nützlich, um auf Regressionen zu prüfen und die Kompatibilität mit verschiedenen API-Ebenen und physischen Geräten zu überprüfen.

UI-Tests ausführen

  • Wenn Sie instrumentierte UI-Tests mit Android Studio ausführen möchten, implementieren Sie Ihren Testcode in einem separaten Android-Testordner: src/androidTest/java. Das Android Gradle-Plug-in erstellt eine Test-App basierend auf Ihrem Testcode und lädt die Test-App dann auf dasselbe Gerät wie die Ziel-App. In Ihrem Testcode können Sie UI-Test-Frameworks verwenden, um Nutzerinteraktionen in der Ziel-App zu simulieren, um Testaufgaben auszuführen, die bestimmte Nutzungsszenarien abdecken.
  • Sie können auch Robolectric verwenden, um UI-Tests auf der JVM auszuführen.

Architektur und Testeinrichtung

Die Architektur Ihrer App sollte es ermöglichen, Teile davon durch Tests zu ersetzen, um Testdoubles zu verwenden. Außerdem sollten Sie Bibliotheken verwenden, die Dienstprogramme für die Tests bereitstellen. Sie können beispielsweise ein Datenrepository-Modul durch eine In-Memory-Version ersetzen, die dem Test gefälschte, deterministische Daten zur Verfügung stellt.

Architekturdiagramme für Produktion und Tests Das Produktionsdiagramm zeigt lokale und Remote-Datenquellen, die Daten an das Repository bereitstellen, das sie wiederum asynchron an die Benutzeroberfläche weitergibt. Das Testdiagramm zeigt ein Fake-Repository, das seine Daten synchron an die Benutzeroberfläche bereitstellt.
Abbildung 3: Eine Benutzeroberfläche testen, indem die Abhängigkeiten durch Fakes ersetzt werden

Der empfohlene Ansatz zum Ersetzen von Abhängigkeiten ist die Abhängigkeitsinjektion. Sie können Ihr eigenes System manuell erstellen. Wir empfehlen jedoch, dafür ein DI-Framework wie Hilt zu verwenden.

Warum UIs automatisch testen?

Eine Android-App kann auf Tausende verschiedener Geräte mit vielen API-Levels und Formfaktoren ausgerichtet sein. Aufgrund der hohen Anpassungsmöglichkeiten, die das Betriebssystem den Nutzern bietet, kann Ihre App auf einigen Geräten falsch gerendert oder sogar abstürzen.

Mit UI-Tests können Sie Kompatibilitätstests durchführen, um das Verhalten einer App in verschiedenen Kontexten zu überprüfen. Sie sollten Ihre UI-Tests auf Geräten ausführen, die sich in folgenden Punkten unterscheiden:

  • API-Level: 21, 25 und 30
  • Sprache: Englisch, Arabisch und Chinesisch
  • Ausrichtung: Hoch- oder Querformat

Außerdem sollten Apps das Verhalten nicht nur auf Smartphones prüfen. Sie sollten auf Tablets, faltbaren Geräten und anderen Geräten testen. Weitere Informationen zum Testen verschiedener Bildschirmgrößen

Arten von UI-Tests

In diesem Abschnitt werden zwei Arten von UI-Tests behandelt:

  • Bei Verhaltenstests wird die UI-Hierarchie analysiert, um Aussagen über die Eigenschaften der UI-Elemente zu treffen.
  • Bei Screenshot-Tests werden Screenshots einer Benutzeroberfläche aufgenommen und mit zuvor genehmigten Bildern verglichen.