Проверка изменений конфигурации экрана с помощью API устройства Espresso

Используйте API устройства Espresso, чтобы протестировать свое приложение, когда в устройстве происходят общие изменения конфигурации, такие как поворот и разворачивание экрана. API устройства Espresso позволяет моделировать эти изменения конфигурации на виртуальном устройстве и выполнять тесты синхронно, поэтому одновременно выполняется только одно действие или утверждение пользовательского интерфейса, а результаты тестов становятся более надежными. Если вы новичок в написании UI-тестов с помощью Espresso, см. его документацию .

Чтобы использовать API устройства Espresso, вам необходимо следующее:

  • Android Studio Iguana или выше
  • Плагин Android Gradle 8.3 или выше
  • Эмулятор Android 33.1.10 или выше
  • Виртуальное устройство Android с API уровня 24 или выше.

Настройте свой проект для API устройства Espresso.

Чтобы настроить проект для поддержки API устройств Espresso, выполните следующие действия:

  1. Чтобы тест мог передавать команды на тестовое устройство, добавьте разрешения INTERNET и ACCESS_NETWORK_STATE в файл манифеста в исходном наборе androidTest :

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      
  2. Включите экспериментальный флаг enableEmulatorControl в файле gradle.properties :

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. Включите опцию emulatorControl в скрипте сборки на уровне модуля:

    Котлин

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    классный

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. В скрипте сборки на уровне модуля импортируйте библиотеку Espresso Device в свой проект:

    Котлин

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

    классный

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

Тестирование на общие изменения конфигурации

API устройства Espresso имеет несколько ориентаций экрана и сворачиваемые состояния, которые можно использовать для имитации изменений конфигурации устройства.

Тест на поворот экрана

Вот пример того, как проверить, что происходит с вашим приложением при повороте экрана устройства:

  1. Во-первых, для стабильного начального состояния установите устройство в портретный режим:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. Создайте тест, который устанавливает альбомную ориентацию устройства во время выполнения теста:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. После поворота экрана убедитесь, что пользовательский интерфейс адаптируется к новому макету должным образом.

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

Тест на раскрытие экрана

Вот пример того, как проверить, что происходит с вашим приложением, если оно находится на складном устройстве и экран разворачивается:

  1. Сначала протестируйте устройство в сложенном состоянии, вызвав onDevice().setClosedMode() . Убедитесь, что макет вашего приложения адаптируется к ширине компактного экрана.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. Чтобы перейти в полностью развернутое состояние, вызовите onDevice().setFlatMode() . Убедитесь, что макет приложения адаптируется к расширенному классу размеров.

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

Укажите, какие устройства нужны для ваших тестов

Если вы запускаете тест, выполняющий действия по складыванию на несгибаемом устройстве, тест, скорее всего, завершится неудачей. Чтобы выполнить только те тесты, которые относятся к работающему устройству, используйте аннотацию @RequiresDeviceMode . Средство запуска тестов автоматически пропускает выполнение тестов на устройствах, которые не поддерживают тестируемую конфигурацию. Вы можете добавить правило требования к устройству в каждый тест или во весь класс тестов.

Например, чтобы указать, что тест следует запускать только на устройствах, поддерживающих развертывание в плоскую конфигурацию, добавьте в тест следующий код @RequiresDeviceMode :

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