Interfejs Glance Unit Test API umożliwia testowanie kodu Glance bez konieczności rozwijania widoków ani używania UI Automatora. Na przykład interfejs API testów jednostkowych umożliwia weryfikowanie warunków, takich jak obecność elementów na liście lub zaznaczenie pól, za pomocą dopasowań takich jak hasContentDescriptionEqualTo lub isChecked.
Ten interfejs API jest lekki i wymaga mniejszej konfiguracji, dzięki czemu możesz przeprowadzać programowanie sterowane testami podczas tworzenia poszczególnych elementów widżetu i porządkować je, aby ułatwić ponowne użycie kodu.
Konfiguracja
Zależności wymagane do korzystania z biblioteki testów jednostkowych są pokazane w tych przykładach:
// 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.
Struktura testu
Uporządkuj funkcje typu „composable” poza klasą GlanceAppWidget, aby umożliwić ponowne użycie kodu i testowanie jednostkowe. Zmniejsz stopień złożoności testowanych jednostek, na ile to możliwe.
Możesz kierować test na funkcję Composable za pomocą provideComposable i uruchamiać testy jednostkowe na jednym lub kilku węzłach Glance, używając odpowiednio onNode lub 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" }, ) } } }
Ustaw kontekst i rozmiar testu
Jeśli funkcja typu „composable” odczytuje kontekst za pomocą metody LocalContext.current(), musisz ustawić kontekst za pomocą setContext(). W przeciwnym razie ten krok jest opcjonalny.
Aby podać kontekst, możesz użyć dowolnej platformy do testów jednostkowych na Androidzie opartej na JVM, np. Robolectric.
Jeśli funkcja typu „composable” uzyskuje dostęp do LocalSize, przed udostępnieniem jej w teście ustaw docelowy rozmiar testu. Domyślny rozmiar to 349 dp x 455 dp, co odpowiada widżetowi 5 x 4 wyświetlanemu na urządzeniu Pixel 4 w trybie portretowym.
- Jeśli Twój AppWidget używa
sizeMode == Single, możesz ustawić te wartości naminWidthiminHeightw plikuinfo.xmlwidżetu. - Jeśli Twój AppWidget używa
sizeMode == Exact, możesz określić rozmiary do przetestowania w podobny sposób, jak określasz rozmiar widżetu, oraz określić rozmiary w orientacji poziomej i pionowej, w których widżet może się wyświetlać, i przetestować je. - Jeśli AppWidget używa
sizeMode == Responsive, możesz ustawić jeden z rozmiarów z listy podanej podczas określaniasizeMode.
Domyślny czas oczekiwania na test to 1 sekunda, ale możesz przekazać niestandardowy czas trwania jako argument metody runGlanceAppWidgetUnitTest, jeśli infrastruktura testowa wymusza inny czas oczekiwania.
Więcej informacji i przykładowe kody znajdziesz w dokumentacji referencyjnej runGlanceAppWidgetUnitTest.