Используйте Espresso Device API для тестирования вашего приложения при распространенных изменениях конфигурации устройства, таких как поворот и разворачивание экрана. Espresso Device API позволяет имитировать эти изменения конфигурации на виртуальном устройстве и выполняет ваши тесты синхронно, поэтому одновременно выполняется только одно действие или проверка пользовательского интерфейса, а результаты тестирования становятся более надежными. Если вы новичок в написании UI-тестов с помощью 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() {
...
}