Test delle unità con Glance

L'API di test di unità di Glance ti consente di testare il codice di Glance senza gonfiare le visualizzazioni o dover utilizzare un'automazione dell'interfaccia utente. Ad esempio, l'API di test di unità ti consente di verificare condizioni, ad esempio se gli elementi sono in un elenco o se le caselle sono state selezionate, utilizzando i corrispondenti come hasContentDescriptionEqualTo o isChecked.

Questa API è leggera e richiede una configurazione ridotta, quindi puoi eseguire lo sviluppo basato sui test man mano che sviluppi i singoli componenti del widget e organizzarli per migliorare il riutilizzo del codice.

Configura

Le dipendenze necessarie per utilizzare la libreria di test di unità sono mostrate nei seguenti esempi:

// 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.

Struttura del test

Organizzare le funzioni componibili al di fuori della classe GlanceAppWidget per abilitare il riutilizzo del codice e il test delle unità. Riduci al massimo la complessità delle unità testate.

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)
    }
}

Imposta il contesto e le dimensioni per il test

Se la funzione componibile legge il contesto utilizzando il metodo LocalContext.current(), devi impostare un contesto utilizzando il metodo LocalContext.current(). In caso contrario, questo passaggio è facoltativo.

Puoi utilizzare qualsiasi framework di test delle unità Android basato su JVM, come Roboletric, per fornire il contesto.

Se la funzione composable accede a LocalSize, imposta le dimensioni previste per il test prima di fornire un composable nel test. Le dimensioni predefinite sono 349 dp x 455 dp, che corrispondono a un widget 5 x 4 visualizzato su un dispositivo Pixel 4 in modalità Ritratto.

  • Se AppWidget utilizza sizeMode == Single, puoi impostarlo su minWidth e minHeight nel file info.xml del widget.
  • Se il tuo AppWidget utilizza sizeMode == Exact, puoi identificare le dimensioni da testare in modo simile a come determinare le dimensioni del widget e identificare le dimensioni orizzontali e verticali in cui il widget potrebbe essere visualizzato e testarle.
  • Se il tuo AppWidget utilizza sizeMode == Responsive, puoi impostarlo su una delle dimensioni dell'elenco che fornisci quando specifichi sizeMode.

La durata predefinita per il timeout di un test è 1 secondo, ma puoi passare una durata personalizzata come argomento al metodo runGlanceAppWidgetUnitTest se l'infrastruttura di test applica un timeout diverso.

Per ulteriori informazioni ed esempi di codice, consulta la documentazione di riferimento per runGlanceAppWidgetUnitTest.