Test delle unità con Glance

L'API di test delle unità Glance ti consente di testare il codice Glance senza gonfiare le visualizzazioni o senza la necessità di un automator UI. Ad esempio, l'API di test delle unità consente di verificare condizioni, ad esempio se gli elementi si trovano in un elenco o se le caselle sono state selezionate, utilizzando matcher come hasContentDescriptionEqualTo o isChecked.

Questa API è leggera e richiede meno configurazione, quindi puoi eseguire lo sviluppo basato sui test mentre sviluppi i singoli componenti del widget e li organizzi per migliorare il riutilizzo del codice.

Configura

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

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
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

Organizza le funzioni componibili al di fuori della classe GlanceAppWidget per consentire il riutilizzo del codice e i test delle unità. Riduci al massimo la complessità delle unità in test.

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

Impostare il contesto e le dimensioni del test

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

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

Se la funzione componibile accede a LocalSize, imposta le dimensioni previste per il test prima di fornire una funzione componibile nel test. La dimensione predefinita è 349 dp x 455 dp, che equivale a un widget 5x4 visualizzato su un Pixel 4 in modalità verticale.

  • Se il tuo 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 determini una dimensione per il widget e identifichi le dimensioni orizzontali e verticali in cui potrebbe essere visualizzato il widget e le testi.
  • Se il tuo AppWidget utilizza sizeMode == Responsive, puoi impostare questo valore su una delle dimensioni dell'elenco che fornisci quando specifichi sizeMode.

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

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