Используйте Espresso Device API для тестирования вашего приложения при распространенных изменениях конфигурации устройства, таких как поворот и разворачивание экрана. Espresso Device API — это рекомендуемый инструмент для имитации действий на уровне устройства в сочетании с правилами тестирования Jetpack Compose. Если вы новичок в написании UI-тестов для Jetpack Compose, см. раздел «Тестирование макета Compose» .
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 поддерживает несколько ориентаций экрана и состояний складывания, которые можно использовать для имитации изменений конфигурации устройства. В следующих примерах показано, как активировать эти состояния устройства и проверить результирующие изменения пользовательского интерфейса с помощью правил тестирования Compose.
Проверка на поворот экрана.
Вот пример того, как проверить, что происходит с вашим приложением при повороте экрана устройства:
Сначала определите правило проверки Compose и установите для устройства единое начальное состояние (например, портретный режим):
import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertDoesNotExist import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag import androidx.test.espresso.device.EspressoDevice.onDevice import androidx.test.espresso.device.action.ScreenOrientation import androidx.test.espresso.device.rules.ScreenOrientationRule import org.junit.Rule import org.junit.Test class MyConfigurationTest { // 1. Define the Compose test rule @get:Rule val composeTestRule = createComposeRule() // 2. Define the Espresso Device rule for a consistent starting state @get:Rule val screenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT) }Создайте тест, который устанавливает альбомную ориентацию устройства во время выполнения теста:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }После поворота экрана используйте
composeTestRule, чтобы проверить, правильно ли ваши компонуемые объекты адаптируются к новому состоянию.@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").assertIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assertDoesNotExist() ... }Для перехода в полностью развернутое состояние вызовите
onDevice().setFlatMode(). Убедитесь, что компоненты адаптируются к расширенному классу размеров.@Test fun myUnfoldedTest() { onDevice().setClosedMode() ... onDevice().setFlatMode() composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed() composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist() }
Укажите, какие устройства необходимы для ваших тестов.
Если вы запускаете тест, который выполняет действия по складыванию на устройстве, которое не является складываемым, тест, скорее всего, завершится неудачей. Чтобы выполнить только те тесты, которые относятся к работающему устройству, используйте аннотацию @RequiresDeviceMode . Программа запуска тестов автоматически пропускает запуск тестов на устройствах, которые не поддерживают тестируемую конфигурацию. Вы можете добавить правило требования устройства к каждому тесту или ко всему классу тестов.
Например, чтобы указать, что тест должен запускаться только на устройствах, поддерживающих разворачивание в плоскую конфигурацию, добавьте в тест следующий код @RequiresDeviceMode :
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}