Mit der Espresso Device API auf Änderungen der Bildschirmkonfiguration testen

Verwenden Sie die Espresso Device API, um Ihre App zu testen, wenn das Gerät häufige Konfigurationsänderungen durchläuft, z. B. Drehung und Entfalten des Displays. Mit der Espresso Device API können Sie diese Konfigurationsänderungen auf einem virtuellen Gerät simulieren und Ihre Tests synchron ausführen. So wird immer nur eine UI-Aktion oder -Bestätigung ausgeführt und Ihre Testergebnisse sind zuverlässiger. Wenn Sie noch keine Erfahrung mit dem Schreiben von UI-Tests mit Espresso haben, lesen Sie die Dokumentation.

Für die Verwendung der Espresso Device API sind folgende Voraussetzungen erforderlich:

  • Android Studio Iguana oder höher
  • Android Gradle-Plug-in 8.3 oder höher
  • Android-Emulator 33.1.10 oder höher
  • Ein virtuelles Android-Gerät mit API-Level 24 oder höher

Projekt für die Espresso Device API einrichten

So richten Sie Ihr Projekt so ein, dass es die Espresso Device API unterstützt:

  1. Damit der Test Befehle an das Testgerät weitergeben kann, fügen Sie der Manifestdatei im androidTest-Quellsatz die Berechtigungen INTERNET und ACCESS_NETWORK_STATE hinzu:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
  2. Aktivieren Sie das experimentelle Flag enableEmulatorControl in der Datei gradle.properties:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. Aktivieren Sie die Option emulatorControl im Build-Script auf Modulebene:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Groovy

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. Importieren Sie die Espresso Device-Bibliothek in das Build-Script auf Modulebene in Ihr Projekt:

    Kotlin

      dependencies {
        androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1")
      }
      

    Groovy

      dependencies {
        androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1'
      }
      

Gängige Konfigurationsänderungen testen

Die Espresso Device API bietet mehrere Bildschirmausrichtungen und Zustände für faltbare Geräte, mit denen Sie Änderungen an der Gerätekonfiguration simulieren können.

Testen auf Bildschirmdrehung

Hier ein Beispiel dafür, wie Sie testen, was mit Ihrer App passiert, wenn sich das Display des Geräts dreht:

  1. Stellen Sie zuerst den Modus des Geräts auf Hochformat ein, damit es immer im selben Zustand startet:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. Erstellen Sie einen Test, bei dem das Gerät während der Testausführung ins Querformat wechselt:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. Prüfen Sie nach der Bildschirmdrehung, 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()
      }
      

Test auf Displayentfaltung

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 das Display aufgeklappt wird:

  1. Testen Sie zuerst das 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()
        ...
      }
      
  2. Wenn Sie das Gerät vollständig aufklappen möchten, rufen Sie onDevice().setFlatMode() auf. 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 Faltaktionen 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 laufende Gerät relevant sind, verwenden Sie die Anmerkung @RequiresDeviceMode. Der Test-Runner überspringt automatisch die Ausführung von Tests auf Geräten, die die getestete Konfiguration nicht unterstützen. Sie können die Geräteanforderungen für jeden Test oder für eine ganze Testklasse hinzufügen.

Wenn Sie beispielsweise angeben möchten, dass ein Test nur auf Geräten ausgeführt werden soll, die das Entfalten in eine flache Konfiguration unterstützen, fügen Sie dem Test den folgenden @RequiresDeviceMode-Code hinzu:

@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
  ...
}