Testowanie jednostkowe za pomocą funkcji Glance

Interfejs API testu jednostki Glance 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 frameworku 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 orientacji pionowej.

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