projectedtestrule, управление виртуальными устройствами
Автоматизировать тестирование сложно, когда код зависит от физического оборудования. Например, может потребоваться вручную подключать и отключать физическое устройство для проверки состояния подключения. Учитывая разнообразие типов , возможностей и состояний аудио- и видеоочков, эта задача становится еще сложнее. Для тестирования в таких разнообразных ситуациях используйте API Projected Test Rule для автоматизации настройки и управления тестовой средой. Библиотека обрабатывает создание проекционных устройств, состояния подключения и проверку возможностей, позволяя вам сосредоточиться на тестировании основной логики вашего приложения. Используйте эти API для создания надежных наборов тестов без написания шаблонного кода.
Добавьте зависимости библиотеки.
Чтобы использовать правило тестирования, добавьте тестовый артефакт в файл build.gradle вашего приложения:
Классный
dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}
Котлин
dependencies {
// JXR Projected testing library
testImplementation("androidx.xr.projected:projected-testing:1.0.0-alpha07")
}
Настройте правило проверки
Для настройки базового правила тестирования добавьте аннотацию к правилу в вашем тестовом классе. По умолчанию правило подключает проекционное устройство и включает его визуальные возможности перед каждым запуском теста.
@get:Rule val projectedTestRule = ProjectedTestRule() private val context: Context get() = ApplicationProvider.getApplicationContext() @Test fun testWithConnectedDevice() { val projectedContext = ProjectedContext.createProjectedDeviceContext(context) assertThat(ProjectedContext.isProjectedDeviceContext(projectedContext)).isTrue() }
Протестируйте другие распространенные сценарии.
Теперь, когда вы настроили предполагаемую тестовую среду с помощью базового правила тестирования, протестируйте другие распространенные сценарии для аудио- и видеоочков, чтобы проверить функциональность вашего приложения.
Отключение тестового устройства
Чтобы проверить, как ваше приложение реагирует на потерю связи с очками, используйте свойство isDeviceConnected :
@Test fun testDeviceDisconnection() { // manually disconnect the device via the rule projectedTestRule.isDeviceConnected = false assertThrows(IllegalStateException::class.java) { ProjectedContext.createProjectedDeviceContext(context) } }
Основные моменты, касающиеся кода.
- Это правило сбрасывает свойства, такие как
isDeviceConnectedдо значений по умолчанию перед каждой проверкой. Вам не нужно вручную сбрасывать эти свойства в методах с@After.
Проверьте возможности различных устройств.
Очки с дисплеем могут отображать пользовательские интерфейсы, созданные с помощью Jetpack Compose Glimmer. По умолчанию правило ProjectedTestRule включает CAPABILITY_VISUAL_UI . Чтобы точно определить, что поддерживает проецируемое устройство, используйте набор capabilities . Это полезно для проверки того, правильно ли ваше приложение проверяет поддержку оборудования, прежде чем пытаться проецировать контент на очки.
@Test fun testAppBehaviorWithoutDisplayCapabilities() = projectedTestRule.launchTestProjectedDeviceActivity { activity -> // disable display capability projectedTestRule.capabilities = setOf() runBlocking { // create the controller val controller = ProjectedDeviceController.create(activity) // verify the app recognizes the lack of visual UI support assertThat(controller.capabilities).doesNotContain(ProjectedDeviceController.Capability.CAPABILITY_VISUAL_UI) } }
Основные моменты, касающиеся кода.
- Это правило сбрасывает такие свойства, как
capabilities, до значений по умолчанию перед каждой проверкой. Вам не нужно вручную сбрасывать эти свойства в методах с@After. - Если вам необходимо проверить поведение именно для действия, которое проецирует изображение очков, используйте
launchTestProjectedDeviceActivity.