L'API di test delle unità di Glance consente di testare il codice di Glance senza aumentare le visualizzazioni o richiedere un automatore UI. Ad esempio, l'API di test delle unità consente di verificare le condizioni, ad esempio se gli elementi sono in un elenco o se le caselle sono state selezionate, utilizzando i matcher come hasContentDescriptionEqualTo o isChecked.
Questa API è leggera e richiede meno configurazione, quindi puoi eseguire lo sviluppo basato sui test mentre sviluppi singoli componenti del widget e li organizzi per migliorare il riutilizzo del codice.
Configurazione
Le dipendenze richieste 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 di test
Organizza le funzioni composable al di fuori della classe GlanceAppWidget per consentire il riutilizzo del codice e il test delle unità. Riduci il più possibile la complessità delle unità in fase di test.
Puoi scegliere come target un composable di test con provideComposable ed eseguire i test delle unità su uno o più nodi Glance rispettivamente con onNode o onAllNodes.
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" }, ) } } }
Impostare il contesto e le dimensioni per il test
Se la funzione composable 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, ad esempio Robolectric, 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 equivalgono a un widget 5x4 visualizzato su un dispositivo Pixel 4 in modalità verticale.
- Se il widget dell'app utilizza
sizeMode == Single, puoi impostarlo suminWidtheminHeightnel fileinfo.xmldel widget. - Se il widget dell'app utilizza
sizeMode == Exact, puoi identificare le dimensioni da testare in modo simile a come determini le dimensioni del widget e identificare le dimensioni orizzontali e verticali in cui il widget potrebbe essere visualizzato ed eseguirne il test. - Se il widget dell'app utilizza
sizeMode == Responsive, puoi impostarlo su una delle dimensioni dell'elenco che fornisci quando specifichi ilsizeMode.
La durata predefinita per un timeout di test è di 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.