Testowanie pod kątem zmian w konfiguracji ekranu za pomocą interfejsu Espresso Device API

Przetestuj swoją aplikację za pomocą interfejsu Espresso Device API, jeśli w urządzeniu występują typowe zmiany konfiguracji, takie jak obrót ekranu czy rozwijanie ekranu. Interfejs Espresso Device API pozwala symulować te zmiany konfiguracji na urządzeniu wirtualnym i synchronicznie wykonywać testy. Dzięki temu w danym momencie wykonywane jest tylko jedno działanie interfejsu lub jedno asercja, a wyniki testu są bardziej wiarygodne. Jeśli nie masz doświadczenia w pisaniu testów interfejsu w Espresso, zapoznaj się z dokumentacją tej usługi.

Aby korzystać z interfejsu Espresso Device API, potrzebujesz:

  • Android Studio Iguana lub nowsza
  • Wtyczka Androida do obsługi Gradle w wersji 8.3 lub nowszej
  • Emulator Androida w wersji 33.1.10 lub nowszej
  • Wirtualne urządzenie z Androidem z interfejsem API na poziomie 24 lub wyższym

Konfigurowanie projektu do obsługi interfejsu Espresso Device API

Aby skonfigurować projekt pod kątem obsługi interfejsu Espresso Device API, wykonaj te czynności:

  1. Aby zezwolić na używanie poleceń testowych na urządzeniu testowym, dodaj uprawnienia INTERNET i ACCESS_NETWORK_STATE do pliku manifestu w zbiorze źródłowym androidTest:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      
  2. Włącz eksperymentalną flagę enableEmulatorControl w pliku gradle.properties:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. Włącz opcję emulatorControl w skrypcie kompilacji na poziomie modułu:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Odlotowy

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. W skrypcie kompilacji na poziomie modułu zaimportuj bibliotekę urządzenia do espresso do swojego projektu:

    Kotlin

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

    Odlotowy

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

Testowanie pod kątem typowych zmian konfiguracji

Espresso Device API ma wiele orientacji ekranu i umożliwia składanie, co pozwala symulować zmiany w konfiguracji urządzenia.

Przetestuj na podstawie obrót ekranu

Ten przykład pokazuje, jak sprawdzić, co dzieje się z aplikacją po obróceniu ekranu urządzenia:

  1. Aby uzyskać spójny stan początkowy, ustaw urządzenie w orientacji pionowej:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. Utwórz test, który ustawia na urządzeniu orientację poziomą podczas wykonywania testu:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. Po obróceniu ekranu sprawdź, czy interfejs prawidłowo dostosowuje się do nowego układu.

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist()
      }
      

Przeprowadź testy względem rozwijania ekranu

Oto przykład, jak sprawdzić, co dzieje się z aplikacją, która zostanie umieszczona na urządzeniu składanym i po otwarciu ekranu:

  1. Najpierw przetestuj złożone urządzenie, wywołując onDevice().setClosedMode(). Upewnij się, że układ aplikacji dostosowuje się do kompaktowej szerokości ekranu.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. Aby przejść do stanu pełnego rozłożenia, wywołaj onDevice().setFlatMode(). Sprawdź, czy układ aplikacji dostosowuje się do klasy rozmiaru rozwiniętego.

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

Określ, jakich urządzeń potrzebują Twoje testy

Jeśli przeprowadzasz test, który wykonuje działania zwijania na urządzeniu, które nie jest składane, test prawdopodobnie zakończy się niepowodzeniem. Aby wykonać tylko te testy, które dotyczą działającego urządzenia, użyj adnotacji @RequiresDeviceMode. Uruchamiający testy automatycznie pomija testy na urządzeniach, które nie obsługują testowanej konfiguracji. regułę wymagań dotyczących urządzeń możesz dodać do każdego testu lub do całej klasy testowej;

Aby np. wskazać, że test powinien być przeprowadzany tylko na urządzeniach, które obsługują rozwijanie do płaskiej konfiguracji, dodaj do testu ten kod @RequiresDeviceMode:

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