Testelemente in Android

Was Sie testen sollten, hängt von Faktoren wie dem Typ der Anwendung, dem Entwicklungsteam, der Menge an Legacy-Code und der verwendeten Architektur ab. In den folgenden Abschnitten wird beschrieben, was Anfänger bei der Planung von Tests in ihrer App berücksichtigen sollten.

Organisation von Testverzeichnissen

Ein typisches Projekt in Android Studio enthält zwei Verzeichnisse, die Tests abhängig von ihrer Ausführungsumgebung enthalten. Organisieren Sie Ihre Tests wie beschrieben in den folgenden Verzeichnissen:

  • Das Verzeichnis androidTest sollte die Tests enthalten, die auf echten oder virtuellen Geräten ausgeführt werden. Zu diesen Tests gehören Integrationstests, End-to-End-Tests und andere Tests, bei denen die JVM allein nicht die Funktionalität Ihrer Anwendung validieren kann.
  • Das Verzeichnis test sollte die Tests enthalten, die auf Ihrem lokalen Computer ausgeführt werden, z. B. Einheitentests. Im Gegensatz zum obigen können dies Tests sein, die auf einer lokalen JVM ausgeführt werden.

Wichtige Einheitentests

Wenn Sie die Best Practices befolgen, sollten Sie in den folgenden Fällen Einheitentests verwenden:

  • Unittests für ViewModels oder Presenters
  • Einheitentests für die Datenschicht, insbesondere Repositories. Der Großteil der Datenschicht sollte plattformunabhängig sein. So können Test-Doubles Datenbankmodule und Remote-Datenquellen in Tests ersetzen. Weitere Informationen finden Sie in der Anleitung zur Verwendung von Test-Doubles in Android.
  • Einheitentests für andere plattformunabhängige Ebenen wie die Domainebene, z. B. für Anwendungsfälle und Interaktionen.
  • Einheitentests für Dienstprogrammklassen wie Stringbearbeitung und Mathematik.

Grenzfälle testen

Einheitentests sollten sich sowohl auf normale als auch auf Grenzfälle konzentrieren. Grenzfälle sind ungewöhnliche Szenarien, die menschliche Tester und größere Tests wahrscheinlich nicht erkennen werden. Hier einige Beispiele:

  • Mathematische Operationen mit negativen Zahlen, Nullen und Grenzbedingungen
  • Alle möglichen Netzwerkverbindungsfehler.
  • Beschädigte Daten, z. B. fehlerhaftes JSON-Format.
  • Simulieren des vollen Speichers beim Speichern in einer Datei.
  • Objekt, das mitten in einem Prozess neu erstellt wird (z. B. eine Aktivität beim Drehen des Geräts).

Zu vermeidende Einheitentests

Einige Einheitentests sollten aufgrund ihres niedrigen Werts vermieden werden:

  • Tests, die die korrekte Funktionsweise des Frameworks oder einer Bibliothek prüfen, nicht des Codes.
  • Framework-Einstiegspunkte wie Aktivitäten, Fragmente oder Dienste sollten keine Geschäftslogik haben, sodass Einheitentests keine Priorität haben sollten. Einheitentests für Aktivitäten sind wenig wertvoll, da sie hauptsächlich Framework-Code abdecken und eine aufwendigere Einrichtung erforderlich ist. Instrumentierte Tests wie UI-Tests können diese Klassen abdecken.

UI-Tests

Es gibt verschiedene Arten von UI-Tests, die Sie verwenden sollten:

  • Mit Bildschirm-UI-Tests werden wichtige Nutzerinteraktionen auf einem einzigen Bildschirm geprüft. Sie führen Aktionen wie das Klicken auf Schaltflächen, die Eingabe von Formularen und die Überprüfung sichtbarer Status aus. Ein Testkurs pro Bildschirm ist ein guter Ausgangspunkt.
  • Nutzerfluss-Tests oder Navigationstests, die die gängigsten Pfade abdecken. Diese Tests simulieren, wie sich ein Nutzer durch einen Navigationsfluss bewegt. Es handelt sich um einfache Tests, die bei der Überprüfung auf Laufzeitabstürze bei der Initialisierung nützlich sind.

Andere Tests

Es gibt spezialisiertere Tests wie Screenshot-Tests, Leistungstests und Monkey-Tests. Sie können Tests auch nach Zweck kategorisieren, z. B. Regressionen, Zugänglichkeit und Kompatibilität.

Weitere Informationen

Um isolierte Tests durchzuführen, müssen Sie häufig die Abhängigkeiten der zu testenden Person durch fiktive oder simulierte Abhängigkeiten ersetzen, die allgemein als "Test-Doubles" bezeichnet werden. Lesen Sie mehr dazu unter Test-Doubles in Android verwenden.

Wie Sie Unit- und UI-Tests erstellen, erfahren Sie in den Testcodelabs.