Prueba de unidades con Glance

La API de pruebas de unidades de Glance te permite probar tu código de Glance sin aumentar las vistas ni necesitar un automatizador de IU. Por ejemplo, la API de pruebas de unidades te permite verificar condiciones, como si los elementos están en una lista o si se marcaron casillas, con comparadores como hasContentDescriptionEqualTo o isChecked.

Esta API es liviana y requiere menos configuración, por lo que puedes realizar un desarrollo basado en pruebas a medida que desarrollas partes individuales de tu widget y las organizas para mejorar la reutilización del código.

Configuración

En los siguientes ejemplos, se muestran las dependencias necesarias para usar la biblioteca de pruebas de unidades:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

Estructura de prueba

Organiza las funciones de componibilidad fuera de la clase GlanceAppWidget para habilitar la reutilización del código y las pruebas de unidades. Reduce la complejidad de tus unidades en prueba tanto como sea posible.

Puedes orientar un elemento componible de prueba con provideComposable y ejecutar tus pruebas de unidades en uno o varios nodos de Glance con onNode o onAllNodes, respectivamente.

private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!"

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest {
        // Set the composable to test
        provideComposable {
            MyNewsItemComposable(FAKE_HEADLINE)
        }

        // Perform assertions
        onNode(hasTestTag("headline"))
            .assertHasText(FAKE_HEADLINE)
    }


    @Composable
    fun MyNewsItemComposable(headline: String) {
        Row {
            Text(
                text = headline,
                modifier = GlanceModifier.semantics { testTag = "headline" },
            )
        }
    }
}

Establece el contexto y el tamaño de la prueba

Si tu función de componibilidad lee el contexto con el método LocalContext.current(), debes establecer un contexto con setContext(). De lo contrario, este paso es opcional.

Puedes usar cualquier framework de pruebas de unidades de Android basado en JVM, como Roboletric, para proporcionar el contexto.

Si tu función de componibilidad accede a LocalSize, establece el tamaño deseado para la prueba antes de proporcionar un elemento componible en la prueba. El tamaño predeterminado es 349.dp x 455.dp, lo que equivale a un widget de 5x4 que se muestra en un dispositivo Pixel 4 en modo vertical.

  • Si tu AppWidget usa sizeMode == Single, puedes establecerlo en minWidth y minHeight en el archivo info.xml de tu widget.
  • Si tu AppWidget usa sizeMode == Exact, puedes identificar los tamaños que se probarán de manera similar a la forma en que determinas un tamaño para tu widget y luego, identificar los tamaños horizontal y vertical en los que puede aparecer tu widget y probarlos.
  • Si tu AppWidget usa sizeMode == Responsive, puedes establecerlo en uno de los tamaños de la lista que proporcionas cuando especificas el sizeMode.

La duración predeterminada para el tiempo de espera de una prueba es de 1 segundo, pero puedes pasar una duración personalizada como argumento al método runGlanceAppWidgetUnitTest si tu infraestructura de prueba aplica un tiempo de espera diferente.

Para obtener más información y ejemplos de código, consulta la documentación de referencia de runGlanceAppWidgetUnitTest.