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 lekki i wymaga mniej konfiguracji, więc możesz prowadzić rozwój oparty na testach, gdy tworzysz poszczególne elementy widżetu i je organizujesz, aby zwiększyć możliwość ponownego użycia 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

Organizuj funkcje składane poza klasą GlanceAppWidget, aby umożliwić ponowne wykorzystanie 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 Twoja funkcja kompozycyjna uzyskuje dostęp do klasy LocalSize, zanim udostępnisz w teście element kompozycyjny, ustaw zamierzony rozmiar na potrzeby testu. Rozmiar domyślny 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 widżet AppWidget używa parametru sizeMode == Single, możesz ustawić go na minWidthminHeight w pliku info.xml widżetu.
  • Jeśli Twój widżet AppWidget korzysta z elementu sizeMode == Exact, możesz określić rozmiary do przetestowania w sposób podobny do określania rozmiaru widżetu oraz określić rozmiary w orientacji poziomej i pionowej, w których może się wyświetlać widżet, i je przetestować.
  • 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ładowy kod znajdziesz w dokumentacji referencyjnej dotyczącej runGlanceAppWidgetUnitTest.