Mit der Espresso Device API können Sie Ihre App testen, wenn das Gerät häufigen Konfigurationsänderungen unterzogen wird, z. B. Drehen und Aufklappen des Displays. Mit der Espresso Device API können Sie diese Konfigurationsänderungen auf einem virtuellen Gerät simulieren. Ihre Tests werden synchron ausgeführt, sodass jeweils nur eine UI-Aktion oder ‑Assertion erfolgt und Ihre Testergebnisse zuverlässiger sind. Wenn Sie noch nicht mit dem Schreiben von UI-Tests mit Espresso vertraut sind, finden Sie hier die Dokumentation.
Für die Verwendung der Espresso Device API benötigen Sie Folgendes:
- Android Studio Iguana oder höher
- Android-Gradle-Plug-in ab Version 8.3
- Android Emulator 33.1.10 oder höher
- Virtuelles Android-Gerät mit API-Level 24 oder höher
Projekt für die Espresso Device API einrichten
So richten Sie Ihr Projekt für die Unterstützung der Espresso Device API ein:
Damit der Test Befehle an das Testgerät übergeben kann, fügen Sie der Manifestdatei im Quellsatz
androidTest
die BerechtigungenINTERNET
undACCESS_NETWORK_STATE
hinzu:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Aktivieren Sie das experimentelle Flag
enableEmulatorControl
in der Dateigradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Aktivieren Sie die Option
emulatorControl
im Build-Skript auf Modulebene:Kotlin
testOptions { emulatorControl { enable = true } }
Groovy
testOptions { emulatorControl { enable = true } }
Importieren Sie die Espresso Device-Bibliothek in das Build-Skript auf Modulebene:
Kotlin
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
Häufige Konfigurationsänderungen testen
Die Espresso Device API bietet mehrere Bildschirmorientierungen und faltbare Zustände, mit denen Sie Änderungen an der Gerätekonfiguration simulieren können.
Auf Bildschirmdrehung testen
Hier ist ein Beispiel dafür, wie Sie testen können, was mit Ihrer App passiert, wenn sich das Display des Geräts dreht:
Stellen Sie zuerst sicher, dass sich das Gerät im Hochformat befindet, um einen einheitlichen Startzustand zu erhalten:
import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule ... @get:Rule val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
Erstellen Sie einen Test, der das Gerät während der Testausführung in das Querformat versetzt:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
Prüfen Sie nach dem Drehen des Displays, ob sich die Benutzeroberfläche wie erwartet an das neue Layout anpasst.
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
Testen, wenn das Display aufgeklappt wird
Hier ist ein Beispiel dafür, wie Sie testen können, was mit Ihrer App passiert, wenn sie auf einem faltbaren Gerät ausgeführt wird und der Bildschirm aufgeklappt wird:
Testen Sie zuerst mit dem Gerät im zusammengeklappten Zustand, indem Sie
onDevice().setClosedMode()
aufrufen. Das Layout Ihrer App muss sich an die kompakte Bildschirmbreite anpassen.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
Rufen Sie
onDevice().setFlatMode()
auf, um in den vollständig aufgeklappten Zustand zu wechseln. Prüfen Sie, ob sich das Layout der App an die erweiterte Größenklasse anpasst.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist() }
Angeben, welche Geräte für Ihre Tests erforderlich sind
Wenn Sie einen Test ausführen, bei dem Faltvorgänge auf einem Gerät ausgeführt werden, das nicht faltbar ist, schlägt der Test wahrscheinlich fehl. Wenn Sie nur die Tests ausführen möchten, die für das aktuelle Gerät relevant sind, verwenden Sie die Annotation @RequiresDeviceMode
. Der Test-Runner überspringt automatisch Tests auf Geräten, die die getestete Konfiguration nicht unterstützen. Sie können die Regel für Geräteanforderungen jedem Test oder einer ganzen Testklasse hinzufügen.
Wenn Sie beispielsweise festlegen möchten, dass ein Test nur auf Geräten ausgeführt werden soll, die das Aufklappen in eine flache Konfiguration unterstützen, fügen Sie Ihrem Test den folgenden @RequiresDeviceMode
-Code hinzu:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}