Interfejs API testów jednostkowych Glance umożliwia testowanie kodu Glance bez powiększania widoków i 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 są 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 jednostkowe podczas 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, organizuj funkcje kompozycyjne poza klasą GlanceAppWidget. Zmniejsz złożoność testowanych jednostek tak bardzo, jak to możliwe.
Możesz kierować testy 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.
Do podania kontekstu 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 udostępnieniem elementu kompozycyjnego w teście ustaw zamierzony rozmiar na potrzeby testu. Domyślny rozmiar to 349 dp x 455 dp, co odpowiada widżetowi 5x4 wyświetlanemu na urządzeniu Pixel 4 w trybie pionowym.
- Jeśli Twój widżet aplikacji używa
sizeMode == Single, możesz ustawić tę wartość 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ć tę wartość 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.