Prueba de unidades con Glance

La API de prueba 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 prueba de unidades te permite verificar condiciones, como si los elementos están en una lista o si las casillas se marcaron, mediante comparadores como hasContentDescriptionEqualTo o isChecked.

Esta API es liviana y requiere menos configuración, por lo que puedes realizar 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

Las dependencias necesarias para usar la biblioteca de pruebas de unidades se muestran en los siguientes ejemplos:

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

Estructura de pruebas

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

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasAuthorAsSubtitle() = runGlanceAppWidgetUnitTest {
        // Prepare inputs and state
        setAppWidgetSize(100.dp, 100.dp)

        // Set the composable under test
        provideComposable {
            MyNewsItemComposable(TEST_NEWS_ITEM)
        }

        // Perform assertions
        onNode(hasTestTag("subTitle"))
            .assertHasText(TEST_NEWS_ITEM.authorName)
    }
}

Establece el contexto y el tamaño para la prueba

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

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

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

  • Si el AppWidget usa sizeMode == Single, puedes establecer esto en minWidth y minHeight en el archivo info.xml del widget.
  • Si el AppWidget usa sizeMode == Exact, puedes identificar los tamaños que se probarán de manera similar a como determinas un tamaño para el widget, además de identificar los tamaños horizontales y verticales en los que el widget puede aparecer y probarlos.
  • Si el AppWidget usa sizeMode == Responsive, puedes establecer esto en uno de los tamaños de la lista que proporcionas cuando especificas el sizeMode.

La duración predeterminada de un tiempo de espera de 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 muestras de código, consulta la documentación de referencia de runGlanceAppWidgetUnitTest.