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

Użyj interfejsu Espresso Device API, aby przetestować aplikację, gdy na urządzeniu występują powszechne problemy zmian konfiguracji, takich jak obrót i rozwijanie ekranu. Espresso Interfejs Device API umożliwia symulację zmian konfiguracji na urządzeniu wirtualnym oraz wykonuje testy synchronicznie, więc na stronie odbywa się tylko jedno działanie interfejsu lub jedno asercja w konkretnym czasie, a wyniki testu będą bardziej wiarygodne. Jeśli nie masz doświadczenia z interfejsem do pisania testów za pomocą Espresso znajdziesz w jego dokumentacji.

Aby korzystać z interfejsu Espresso Device API, musisz mieć:

  • 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
  • Urządzenie wirtualne z Androidem, na którym działa interfejs API na poziomie 24 lub wyższym

Konfigurowanie projektu pod kątem interfejsu Espresso Device API

Aby skonfigurować projekt do obsługi interfejsu Espresso Device API, wykonaj te czynności:

  1. Aby umożliwić działanie poleceń testowych na urządzeniu testowym, dodaj do 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 flagę eksperymentu enableEmulatorControl w Plik gradle.properties:

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

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Odlotowe

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. Zaimportuj bibliotekę Espresso Device Policy w skrypcie kompilacji na poziomie modułu. do swojego projektu.

    Kotlin

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

    Odlotowe

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

Testowanie pod kątem typowych zmian w konfiguracji

Espresso Device API może mieć wiele orientacji ekranu i możliwość złożenia co pozwala symulować zmiany w konfiguracji urządzenia.

Przeprowadź test względem obrotu ekranu

Oto przykład, jak sprawdzić, co dzieje się z aplikacją, gdy ekran urządzenia obraca się:

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

      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 podczas testu ustawi na urządzeniu orientację poziomą wykonanie:

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

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

Przetestuj rozłożenie ekranu

Oto przykład, jak sprawdzić, co dzieje się z aplikacją na urządzeniu składanym i wyświetla się ekran:

  1. Najpierw przetestuj złożone urządzenie, wywołując połączenie onDevice().setClosedMode() Dopilnuj, aby układ aplikacji dostosowuje się do szerokości niewielkiego ekranu.

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

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

Określ urządzenia, których potrzebują testy

Jeśli testujesz składanie elementów na urządzeniu, które nie jest lub składa się, test prawdopodobnie się nie powiedzie. Przeprowadzanie tylko istotnych testów do uruchomionego urządzenia, użyj adnotacji @RequiresDeviceMode. Zawodnik wykonujący test automatycznie pomija testy na urządzeniach, które nie obsługują testowanej konfiguracji. Do każdego testu możesz dodać regułę wymagań dotyczących urządzeń lub całej klasy testowej.

Aby na przykład określić, że test powinien być uruchamiany tylko na urządzeniach, które obsługują rozwija się do konfiguracji płaskiej, dodaj ten kod @RequiresDeviceMode do testu:

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