Automatiza la administración de dispositivos virtuales con reglas de prueba proyectadas

projectedtestrule, administración de dispositivos virtuales

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Lentes de audio y
pantalla

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.