projectedtestrule, administración de dispositivos virtuales
Es difícil automatizar las pruebas cuando el código depende del hardware físico. Por ejemplo, es posible que debas conectar y desconectar manualmente el dispositivo físico para verificar los estados de conexión. Con todos los diferentes tipos, capacidades y estados del dispositivo de los lentes de audio y los lentes con pantalla, este desafío puede volverse aún más complejo. Para probar este conjunto diverso de casos, usa las APIs de Projected Test Rule para automatizar la configuración y la administración de un entorno de prueba proyectado. La biblioteca controla la creación de dispositivos proyectados, los estados de conexión y la verificación de capacidades, por lo que puedes enfocarte en probar la lógica principal de tu app. Usa estas APIs para compilar paquetes de pruebas sólidos sin escribir código estándar.
Agrega dependencias de bibliotecas
Para usar la regla de prueba, agrega el artefacto de prueba al archivo build.gradle de tu app:
Groovy
dependencies {
// JXR Projected testing library
testImplementation "androidx.xr.projected:projected-testing:1.0.0-alpha07"
}
Kotlin
dependencies {
// JXR Projected testing library
testImplementation("androidx.xr.projected:projected-testing:1.0.0-alpha07")
}
Configura la regla de prueba
Para configurar la regla de prueba básica, anota la regla en tu clase de prueba. De forma predeterminada, la regla conecta un dispositivo proyectado y habilita sus capacidades visuales antes de que se ejecute cada prueba.
@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() }
Prueba otras situaciones comunes
Ahora que configuraste tu entorno de prueba proyectado con una regla de prueba básica, prueba otros casos de uso comunes para los lentes de audio y los lentes de pantalla para verificar la funcionalidad de tu app.
Desconexión del dispositivo de prueba
Para probar cómo reacciona tu app cuando se pierde la conexión con los lentes, usa la propiedad isDeviceConnected:
@Test fun testDeviceDisconnection() { // manually disconnect the device via the rule projectedTestRule.isDeviceConnected = false assertThrows(IllegalStateException::class.java) { ProjectedContext.createProjectedDeviceContext(context) } }
Puntos clave sobre el código
- La regla restablece las propiedades, como
isDeviceConnected, a sus valores predeterminados antes de cada prueba. No es necesario que restablezcas manualmente estas propiedades en los métodos@After.
Prueba diferentes capacidades del dispositivo
Los lentes de pantalla pueden mostrar UIs creadas con Jetpack Compose Glimmer. De forma predeterminada, ProjectedTestRule habilita CAPABILITY_VISUAL_UI. Para definir exactamente qué admite el dispositivo proyectado, usa el conjunto capabilities. Esto es útil para verificar que tu app compruebe correctamente la compatibilidad con el hardware antes de intentar proyectar contenido en los lentes.
@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) } }
Puntos clave sobre el código
- La regla restablece las propiedades, como
capabilities, a sus valores predeterminados antes de cada prueba. No es necesario que restablezcas manualmente estas propiedades en los métodos@After. - Cuando necesites verificar el comportamiento específicamente para una actividad que se proyecta para mostrar lentes, usa
launchTestProjectedDeviceActivity.