Mit der Espresso Device API auf Änderungen der Bildschirmkonfiguration testen

Verwenden Sie die Espresso Device API, um Ihre Anwendung zu testen, wenn das Gerät allgemeine Konfigurationsänderungen wie die Drehung oder das Aufklappen des Bildschirms durchläuft. Mit der Espresso Device API können Sie diese Konfigurationsänderungen auf einem virtuellen Gerät simulieren und Ihre Tests synchron ausführen, sodass nur eine UI-Aktion oder Assertion gleichzeitig ausgeführt wird und Ihre Testergebnisse zuverlässiger sind. Wenn Sie zum ersten Mal UI-Tests mit Espresso schreiben, lesen Sie die zugehörige Dokumentation.

Zur Verwendung der Espresso Device API ist Folgendes erforderlich:

  • Android Studio Iguana oder höher
  • Android-Gradle-Plug-in 8.3 oder höher
  • 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

Gehen Sie wie folgt vor, um Ihr Projekt so einzurichten, dass es die Espresso Device API unterstützt:

  1. Damit die Befehle zur Testkarte für das Testgerät verwendet werden können, fügen Sie der Manifestdatei im Quellsatz androidTest die Berechtigungen INTERNET und ACCESS_NETWORK_STATE hinzu:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.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-Skript auf Modulebene:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Groovig

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. Importieren Sie die Espresso-Gerätebibliothek im Build-Skript auf Modulebene in Ihr Projekt:

    Kotlin

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

    Groovig

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

Mit gängigen Konfigurationsänderungen testen

Die Espresso Device API bietet mehrere Bildschirmausrichtungen und faltbare Status, mit denen Sie Gerätekonfigurationsänderungen simulieren können.

Gegen Bildschirmdrehung testen

Hier ein Beispiel, wie du testen kannst, was mit deiner App passiert, wenn sich der Gerätebildschirm dreht:

  1. Für einen einheitlichen Startstatus muss das Gerät zuerst in das Hochformat gestellt werden:

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

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

Mit Aufklappen des Displays testen

Hier ein Beispiel, wie Sie testen können, was mit Ihrer App passiert, wenn sie sich auf einem faltbaren Gerät befindet und sich das Display aufklappt:

  1. Teste es zuerst im zugeklappten Zustand. Dazu rufst du onDevice().setClosedMode() auf. Achte darauf, dass sich das Layout deiner App an die kompakte Bildschirmbreite anpasst.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. Rufen Sie onDevice().setFlatMode() auf, um in einen vollständig geöffneten Zustand zu wechseln. Prüfe, ob sich das Layout der App an die maximierte Größenklasse anpasst.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        ...
        onDevice().setFlatMode()
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist()
      }
      

Angeben, welche Geräte für die Tests erforderlich sind

Wenn du einen Test durchführst, 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 Annotation @RequiresDeviceMode. Der Test-Runner überspringt automatisch laufende Tests auf Geräten, die die zu testende Konfiguration nicht unterstützen. Du kannst die Geräteanforderungsregel jedem Test oder einer gesamten Testklasse hinzufügen.

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

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