Testowanie jednostkowe za pomocą funkcji Glance

Interfejs Glance unit test API umożliwia testowanie kodu Glance bez nakładania widoków ani konieczności korzystania z automatyzacji interfejsu użytkownika. Na przykład interfejs API testu jednostkowego umożliwia weryfikowanie warunków, takich jak to, czy elementy znajdują się na liście lub czy pola zostały zaznaczone, za pomocą elementów dopasowujących, takich jak hasContentDescriptionEqualTo lub isChecked.

Ten interfejs API jest prostszy i wymaga mniej konfiguracji, dzięki czemu możesz przeprowadzać testy na podstawie testów, gdy będziesz rozwijać poszczególne elementy widżetu i uporządkować je, aby ułatwić ponowne użycie kodu.

Konfiguracja

Zależność wymagana do korzystania z biblioteki testów jednostkowych jest widoczna w tych przykładach:

// 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.

Struktura testów

Uporządkuj funkcje kompozycyjne poza klasą GlanceAppWidget, aby umożliwić ponowne użycie kodu i testowanie jednostkowe. Zmniejsz złożoność testowanych jednostek w jak największym stopniu.

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)
    }
}

Ustaw kontekst i rozmiar testu

Jeśli funkcja składana odczytuje kontekst za pomocą metody LocalContext.current(), musisz ustawić kontekst za pomocą metody LocalContext.current(). W przeciwnym razie ten krok jest opcjonalny.

Aby zapewnić kontekst, możesz użyć dowolnego frameworka do testowania jednostkowego na Androida opartego na JVM, np. Roboletric.

Jeśli funkcja składanego elementu uzyskuje dostęp do funkcji LocalSize, przed udostępnieniem składanego elementu w teście ustaw odpowiedni rozmiar testu. Domyślny rozmiar to 349 dp x 455 dp, co odpowiada widżetowi 5 x 4 wyświetlanemu w urządzeniu Pixel 4 w trybie pionowym.

  • Jeśli widżet AppWidget używa parametru sizeMode == Single, możesz ustawić go na minWidthminHeight w pliku info.xml widżetu.
  • Jeśli widżet AppWidget używa sizeMode == Exact, możesz określić rozmiary do przetestowania w sposób podobny do określania rozmiaru widżetu oraz zidentyfikować rozmiary w orientacji poziomej i pionowej, w których widżet może się wyświetlać, i przetestować te rozmiary.
  • Jeśli Twoja aplikacja korzysta z elementu sizeMode == Responsive, możesz ustawić jeden z rozmiarów z listy, którą podasz podczas określania elementu sizeMode.

Domyślny czas oczekiwania na zakończenie testu to 1 sekunda, ale jeśli infrastruktura testowa narzuca inny czas oczekiwania, możesz przekazać niestandardowy czas jako argument metody runGlanceAppWidgetUnitTest.

Więcej informacji i przykłady kodu znajdziesz w dokumentacji referencyjnej runGlanceAppWidgetUnitTest.