Test delle unità con Glance

L'API di test delle unità di Glance ti consente di testare il codice di Glance senza eseguire l'inflate delle visualizzazioni o senza bisogno di un UI Automator. Ad esempio, l'API di test delle unità ti consente di verificare condizioni, ad esempio se gli elementi sono 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 su test mentre sviluppi singole parti del widget e le organizzi per migliorare il riutilizzo del codice.

Configurazione

Le dipendenze necessarie per utilizzare la libreria di test delle unità 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'
...
// 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 il più possibile la complessità delle unità sottoposte a test.

Puoi scegliere come target un composable di test con provideComposable ed eseguire i test delle unità su uno o più nodi Glance con onNode o onAllNodes rispettivamente.

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

Imposta il contesto e le dimensioni del test

Se la 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 tua funzione componibile accede a LocalSize, imposta le dimensioni previste per il test prima di fornire un componibile nel test. Le dimensioni predefinite sono 349 dp x 455 dp, che equivalgono a un widget 5x4 mostrato su un dispositivo Pixel 4 in modalità Ritratto.

  • Se l'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 identificare le dimensioni orizzontali e verticali in cui il widget potrebbe essere visualizzato e testarle.
  • Se l'AppWidget utilizza sizeMode == Responsive, puoi impostarlo su una delle dimensioni dell'elenco che fornisci quando specifichi sizeMode.

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

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