Используйте 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, выполните следующие действия:
Чтобы тест мог передавать команды на тестовое устройство, добавьте разрешения
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() {
...
}