Mobile-App-Testing ist der Prozess der Überprüfung, ob eine Anwendung korrekt funktioniert, nicht abstürzt und die Anforderungen erfüllt. Laut Software Testing Help (2025) reduziert automatisiertes Testen die Zeit für Regressionstests um 70–80% im Vergleich zu manuellen Tests. In diesem Artikel behandeln wir Testebenen, Tools für iOS und Android, TDD und BDD sowie CI/CD für Tests.
Wichtigste Erkenntnisse
Unit-Tests sind die Grundlage des Mobile-App-Testings. Sie überprüfen die kleinste Code-Einheit — eine einzelne Funktion, Methode oder Klasse isoliert vom Rest des Systems. In der mobilen Entwicklung werden Unit-Tests in JUnit (Android) und XCTest (iOS) geschrieben. Ein guter Unit-Test muss schnell, unabhängig und wiederholbar sein — er darf nicht von Netzwerk, Datenbank oder UI-Komponenten abhängen. Zur Isolation werden Test-Doubles verwendet: Mocks, Stubs und Fakes.
Mockito (Java/Kotlin) und MockK (Kotlin-first) sind beliebte Bibliotheken zum Erstellen von Mock-Objekten unter Android. Auf iOS werden OCMock, Cuckoo oder manuelle Protokolle verwendet. Regel: Unit-Tests sollten Geschäftslogik und Datenmodelle abdecken. UI-Tests sollten Unit-Tests nicht duplizieren — sie überprüfen die Benutzerinteraktion mit der Oberfläche.
Integrationstests überprüfen die Interaktion zwischen Komponenten: Repository mit Datenbank, ViewModel mit API-Dienst, Navigation zwischen Bildschirmen. Im Gegensatz zu Unit-Tests verwenden Integrationstests reale oder realitätsnahe Abhängigkeiten (z. B. In-Memory-Datenbank oder Mock-Server). Robolectric ist ein Framework zum Ausführen von Android-Tests auf der JVM ohne Emulator, das Integrationstests um das 10-fache beschleunigt.
Snapshot-Tests (Golden Tests) sind eine spezielle Art von Integrationstests, die eine gerenderte UI-Komponente mit einem Referenzbild (Snapshot) vergleichen. Wenn sich das Aussehen ändert, schlägt der Test fehl — der Entwickler sieht, was sich geändert hat. Facebook SnapshotTestCase (iOS) und Shot (Android) sind beliebte Tools für Snapshot-Tests.
E2E-Tests (End-to-End) überprüfen das vollständige Benutzerszenario von Anfang bis Ende: App-Start, Anmeldung, Durchführung einer Aktion, Überprüfung des Ergebnisses. UI-Tests sind eine Teilmenge von E2E, die sich auf die Oberfläche konzentriert. Tools: Espresso (Android), XCUITest (iOS), Detox (React Native). E2E-Tests sind am langsamsten, daher werden sie separat auf CI ausgeführt — normalerweise bei nächtlichen Builds.
XCTest ist Apples integriertes Framework für Unit-Tests mobiler Anwendungen. XCTestRunner führt Tests auf dem Simulator oder einem realen Gerät aus. Tests erben von XCTestCase, enthalten setUp und tearDown zur Vorbereitung und Bereinigung. XCTest enthält XCTAssert für Behauptungen (XCTAssertEqual, XCTAssertNil, XCTAssertTrue) und XCTWaiter zum Warten auf asynchrone Operationen.
Beispiel eines einfachen XCTest-Tests: Erstellen eines User-Modells, Überprüfung der Korrektheit der Initialisierung, Namensformatierung und Altersberechnung. Code Coverage in Xcode zeigt, welche Codezeilen von Tests abgedeckt werden — das Ziel für kommerzielle Projekte: mindestens 70–80% Abdeckung der Geschäftslogik. XCTest ist über xcodebuild test in Xcode Server und CI-Systeme integriert.
XCUITest ist Apples Framework für UI-Tests. Es arbeitet über Accessibility-Identifikatoren: XCUIElementQuery findet Schaltflächen, Eingabefelder, Tabellen nach Label, Identifier oder Typ. XCUITest zeichnet eine Aktionssequenz auf (Record/Playback) und generiert Testcode. Wichtig: Alle UI-Elemente müssen einen accessibilityIdentifier für einen stabilen Testbetrieb haben.
JUnit ist das grundlegende Framework für Unit-Tests mobiler Anwendungen in Java/Kotlin. Unter Android werden JUnit 4 (neueste stabile Version 4.13.2) und JUnit 5 für neue Projekte verwendet. Mockito ist eine Bibliothek zum Erstellen von Mock-Objekten: when(mock.method()).thenReturn(value) — ein Standardmuster zum Isolieren der getesteten Klasse von Abhängigkeiten.
Beispiel eines JUnit-Tests für Android:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class LoginViewModelTest {
@Mock
AuthRepository authRepository;
@Test
public void login_emptyEmail_returnsError() {
LoginViewModel vm = new LoginViewModel(authRepository);
String result = vm.login("", "password123");
assertEquals("Email cannot be empty", result);
verify(authRepository, never()).authenticate(any());
}
}
Espresso ist Googles Framework für Android-UI-Tests. Espresso synchronisiert automatisch mit dem UI-Thread: onView(withId(R.id.button)).perform(click()).check(matches(isDisplayed())). Espresso ist einfach zu schreiben und stabil dank integrierter Wartezeit auf den Ruhezustand. UI Automator ist ein Framework für appübergreifende Tests, das mit Systemelementen (Berechtigungsdialoge, Benachrichtigungsleiste) interagieren kann.
Detox ist ein Gray-Box-E2E-Framework zum Testen von React-Native-Mobil-Apps von Wix. Detox funktioniert auf beiden Plattformen von einer einzigen Testcodebasis aus und verwendet intern Espresso (Android) und XCUITest (iOS). Detox wartet automatisch, bis die App inaktiv ist (keine Animationen, Netzwerkanfragen, Timer), und führt erst dann die nächste Aktion aus.
Appium ist ein universelles plattformübergreifendes Framework, das Android, iOS, Web und Hybrid-Apps unterstützt. Appium verwendet das WebDriver-Protokoll und unterstützt jede Programmiersprache (Java, Python, JS, Ruby). Appium Server fungiert als HTTP-Server, der Befehle in native UI-Automator-/XCUITest-Befehle übersetzt. Der Hauptnachteil von Appium ist die Geschwindigkeit: Tests laufen langsamer als native Espresso- oder XCUITest-Tests.
| Kriterium | iOS | Android |
|---|---|---|
| Unit-Tests | XCTest | JUnit 4/5 + Mockito |
| UI-Tests | XCUITest | Espresso, UI Automator |
| Snapshot-Tests | FBSnapshotTestCase | Shot, Roborazzi |
| Gestenautomatisierung | XCUIGesture | UiAutomator touch |
| Code Coverage | Xcode Code Coverage | Jacoco |
| CI-Integration | xcodebuild test | Gradle connectedCheck |
TDD ist eine Mobile-App-Testmethodik, bei der der Test vor dem Implementierungscode geschrieben wird. Der Red-Green-Refactor-Zyklus: (1) einen Test schreiben, der fehlschlägt (Red), (2) minimalen Code schreiben, um den Test zu bestehen (Green), (3) den Code umgestalten, während der Test bestanden bleibt. TDD bietet 100% Testabdeckung für neue Funktionen und eine saubere Architektur, da der Test die erste Spezifikation der Anforderung ist.
BDD ist eine Erweiterung von TDD, bei der Tests in natürlicher Sprache im Given-When-Then-Format geschrieben werden. Given (Kontext) — When (Aktion) — Then (erwartetes Ergebnis). BDD-Tests sind für alle Teammitglieder verständlich: Entwickler, Tester, Analysten und Kunden. Mock vs. Stub vs. Fake: Mock überprüft die Interaktion (ob die Methode aufgerufen wurde), Stub gibt feste Daten zurück, Fake ist eine vereinfachte funktionierende Implementierung (z. B. In-Memory-DB). Bei IT Sectr verwenden wir TDD für kritische Geschäftslogik und BDD für Abnahmeszenarien.
Test-Doubles ist der allgemeine Name für Objekte, die reale Abhängigkeiten in Tests ersetzen. Es gibt vier Typen: Dummy (Objekt zum Füllen von Parametern, wird nicht verwendet), Stub (gibt vorgegebene Werte zurück), Spy (zeichnet Aufrufe zur Überprüfung auf), Mock (definiert erwartete Aufrufe vorab). Das Verständnis des Unterschieds ist für ein korrektes Testdesign entscheidend.
CI/CD — Continuous Integration und Continuous Delivery: die Praxis des automatischen Buildens und Testens mobiler Anwendungen bei jeder Codeänderung. In der mobilen Entwicklung umfasst die CI/CD-Pipeline: Linting, Unit-Tests, Integrationstests, APK/IPA-Build und UI-Tests. GitHub Actions und Bitrise sind beliebte Plattformen für mobiles CI/CD. Tests sollten schnell ausgeführt werden: Unit-Tests in 1–2 Minuten, Integrationstests in 5–10, UI-Tests in 15–30 Minuten.
Device Farm ist eine Farm realer Geräte zum Testen. Firebase Test Lab (Android) und Xcode Cloud (iOS) bieten Cloud-Zugriff auf hunderte Gerätemodelle. Device Farm deckt Probleme auf, die auf Emulatoren nicht sichtbar sind: unterschiedliche Bildschirmgrößen, Leistung auf älteren Geräten, Kompatibilitätsprobleme. Bei IT Sectr verwenden wir regelmäßig Firebase Test Lab für Android und Xcode Cloud für iOS.
Häufig gestellte Fragen
Für kommerzielle Projekte mindestens 70–80% Abdeckung der Geschäftslogik. UI-Code ist schwerer abzudecken — 50% sind ausreichend. Die Hauptsache ist nicht der Prozentsatz, sondern die Qualität der Tests: Testen Sie kritische Szenarien, Grenzfälle und Fehlerbehandlung.
Mock überprüft die Interaktion — ob eine bestimmte Methode mit bestimmten Parametern aufgerufen wurde. Stub gibt vordefinierte Daten zurück. Mock prüft das Verhalten, Stub prüft den Zustand.
Ja, aber nur für kritische Szenarien: Login, Registrierung, Bestellabschluss, Zahlung. UI-Tests sind langsam und fragil — schreiben Sie keinen Test für jeden Bildschirm. Konzentrieren Sie sich auf E2E-Benutzerszenarien.
Snapshot-Test (Golden Test) vergleicht eine gerenderte UI-Komponente mit einem Referenzbild. Wenn sich das Aussehen ändert (Schriftart, Abstand, Farbe), schlägt der Test fehl — der Entwickler prüft, ob die Änderung beabsichtigt ist. Ideal für Komponentenbibliotheken.
Führen Sie E2E-Tests parallel auf mehreren Geräten aus, verwenden Sie Cloud Device Farm und teilen Sie Tests in unabhängige Gruppen auf. Optimieren Sie Tests: minimieren Sie Wartezeiten, verwenden Sie Mocks für Netzwerkanfragen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.