L'API de test unitaire Glance vous permet de tester votre code Glance sans gonfler les vues ni avoir besoin d'un automatiseur d'UI. Par exemple, l'API de test unitaire vous permet de vérifier des conditions, par exemple si des éléments figurent dans une liste ou si des cases ont été cochées, à l'aide de comparateurs tels que hasContentDescriptionEqualTo
ou isChecked
.
Cette API est légère et nécessite moins de configuration. Vous pouvez donc effectuer un développement basé sur les tests lorsque vous développez des éléments individuels de votre widget et les organiser pour améliorer la réutilisation du code.
Configuration
Les dépendances requises pour utiliser la bibliothèque de tests unitaires sont indiquées dans les exemples suivants:
// 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.
Structure des tests
Organisez les fonctions composables en dehors de la classe GlanceAppWidget
pour permettre la réutilisation du code et les tests unitaires. Réduisez autant que possible la complexité de vos unités testées.
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)
}
}
Définir le contexte et la taille du test
Si votre fonction composable lit le contexte à l'aide de la méthode LocalContext.current()
, vous devez définir un contexte à l'aide de la méthode LocalContext.current()
.
Sinon, cette étape est facultative.
Vous pouvez utiliser n'importe quel framework de test unitaire Android basé sur la JVM, tel que Roboletric, pour fournir le contexte.
Si votre fonction composable accède à LocalSize
, définissez la taille prévue pour le test avant de fournir un composable dans le test. La taille par défaut est de 349 dp x 455 dp, ce qui équivaut à un widget 5x4 affiché sur un appareil Pixel 4 en mode portrait.
- Si votre AppWidget utilise
sizeMode == Single
, vous pouvez définirminWidth
etminHeight
dans le fichierinfo.xml
de votre widget. - Si votre AppWidget utilise
sizeMode == Exact
, vous pouvez identifier les tailles à tester de la même manière que vous déterminez une taille pour votre widget, et identifier les tailles en mode paysage et portrait sur lesquelles votre widget peut s'afficher, et les tester. - Si votre AppWidget utilise
sizeMode == Responsive
, vous pouvez définir cette valeur sur l'une des tailles de la liste que vous fournissez lorsque vous spécifiezsizeMode
.
La durée par défaut d'un délai avant expiration de test est de 1 seconde, mais vous pouvez transmettre une durée personnalisée en tant qu'argument à la méthode runGlanceAppWidgetUnitTest
si votre infrastructure de test applique un délai avant expiration différent.
Pour en savoir plus et pour obtenir des exemples de code, consultez la documentation de référence sur runGlanceAppWidgetUnitTest
.