Interfejs API testów jednostkowych Glance umożliwia testowanie kodu Glance bez konieczności powiększania widoków ani używania narzędzia UI Automator. Na przykład interfejs API testów jednostkowych umożliwia weryfikowanie warunków, takich jak to, czy elementy znajdują się na liście lub czy pola wyboru zostały zaznaczone, za pomocą dopasowań takich jak hasContentDescriptionEqualTo lub isChecked.
Ten interfejs API jest lekki i wymaga mniej konfiguracji, dzięki czemu możesz przeprowadzać testy w trakcie tworzenia poszczególnych elementów widżetu i organizować je w celu zwiększenia możliwości ponownego wykorzystania 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
Aby umożliwić ponowne wykorzystanie kodu i testowanie jednostkowe, uporządkuj funkcje kompozycyjne poza klasą GlanceAppWidget. Zmniejsz stopień złożoności testowanych jednostek tak bardzo, jak to możliwe.
Możesz kierować test na element kompozycyjny za pomocą funkcji provideComposable i uruchamiać testy jednostkowe na jednym lub kilku węzłach Glance za pomocą odpowiednio funkcji 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" }, ) } } }
Ustawianie kontekstu i rozmiaru na potrzeby testu
Jeśli funkcja typu „composable” odczytuje kontekst za pomocą metody LocalContext.current(), musisz ustawić kontekst za pomocą funkcji setContext(). W przeciwnym razie ten krok jest opcjonalny.
Aby podać kontekst, możesz użyć dowolnej platformy testów jednostkowych Androida opartej na JVM, takiej jak Robolectric.
Jeśli funkcja typu „composable” uzyskuje dostęp do LocalSize, przed podaniem elementu kompozycyjnego w teście ustaw zamierzony rozmiar na potrzeby 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 pionowym.
- Jeśli Twój widżet aplikacji używa
sizeMode == Single, możesz ustawić go naminWidthiminHeightw plikuinfo.xmlwidżetu. - Jeśli Twój widżet aplikacji używa
sizeMode == Exact, możesz określić rozmiary do przetestowania w podobny sposób jak w przypadku określania rozmiaru widżetu. Możesz też określić rozmiary poziome i pionowe, w których może pojawiać się widżet, i przetestować je. - Jeśli Twój widżet aplikacji używa
sizeMode == Responsive, możesz ustawić go na jeden z rozmiarów z listy, którą podajesz podczas określaniasizeMode.
Domyślny czas trwania limitu czasu testu to 1 sekunda, ale jeśli infrastruktura testowa wymusza inny limit czasu, możesz przekazać niestandardowy czas trwania jako argument do metody runGlanceAppWidgetUnitTest.
Więcej informacji i przykłady kodu znajdziesz w dokumentacji referencyjnej funkcji
runGlanceAppWidgetUnitTest.