Используйте API устройств Espresso для тестирования приложения при типичных изменениях конфигурации устройства, таких как поворот и развёртывание экрана. API устройств Espresso позволяет имитировать эти изменения конфигурации на виртуальном устройстве и выполняет тесты синхронно, поэтому одновременно выполняется только одно действие или утверждение пользовательского интерфейса, что повышает надёжность результатов тестирования. Если вы новичок в написании тестов пользовательского интерфейса с использованием Espresso, см. документацию по нему.
Для использования API устройства Espresso вам необходимо следующее:
- Android Studio Iguana или выше
- Плагин Android Gradle 8.3 или выше
- Эмулятор Android 33.1.10 или выше
- Виртуальное устройство Android, работающее под управлением API уровня 24 или выше
Настройте свой проект для API устройства Espresso
Чтобы настроить свой проект для поддержки API устройства Espresso, выполните следующие действия:
Чтобы тест мог передавать команды на тестовое устройство, добавьте разрешения
INTERNET
иACCESS_NETWORK_STATE
в файл манифеста в исходном набореandroidTest
:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Включите экспериментальный флаг
enableEmulatorControl
в файлеgradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Включите опцию
emulatorControl
в скрипте сборки на уровне модуля:Котлин
testOptions { emulatorControl { enable = true } }
Круто
testOptions { emulatorControl { enable = true } }
В скрипте сборки на уровне модуля импортируйте библиотеку Espresso Device в свой проект:
Котлин
dependencies { androidTestImplementation("androidx.test.espresso:espresso-device:1.0.1") }
Круто
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
Тестирование на соответствие распространенным изменениям конфигурации
API устройства Espresso имеет несколько ориентаций экрана и складывающихся состояний, которые можно использовать для имитации изменений конфигурации устройства.
Тест на поворот экрана
Вот пример того, как проверить, что происходит с вашим приложением при повороте экрана устройства:
Во-первых, для единообразного начального состояния переведите устройство в портретный режим:
import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule ... @get:Rule val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
Создайте тест, который устанавливает устройство в альбомную ориентацию во время выполнения теста:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
После поворота экрана проверьте, адаптируется ли пользовательский интерфейс к новой компоновке должным образом.
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
Тест на разворачивание экрана
Вот пример того, как проверить, что произойдет с вашим приложением, если оно установлено на складном устройстве и экран разворачивается:
Сначала протестируйте устройство в сложенном состоянии, вызвав метод
onDevice().setClosedMode()
. Убедитесь, что макет вашего приложения адаптируется к ширине компактного экрана.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
Чтобы перейти в полностью развёрнутое состояние, вызовите
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() {
...
}