Testowanie jednostkowe za pomocą funkcji Glance

Interfejs API testów jednostkowych Glance umożliwia testowanie kodu Glance bez powiększania widoków ani korzystania z automatyzacji interfejsu. 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 zostały zaznaczone, za pomocą funkcji dopasowujących, np. hasContentDescriptionEqualTo lub isChecked.

Ten interfejs API jest lekki i wymaga mniej konfiguracji, dzięki czemu możesz przeprowadzać testy 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 przykładach poniżej:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
testImplementation 'org.robolectric:robolectric:4.11.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

Struktura testu

Organizuj funkcje kompozycyjne poza klasą GlanceAppWidget, aby umożliwić ponowne użycie kodu i testowanie jednostkowe. Zmniejsz złożoność testowanych urządzeń 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)
    }
}

Ustawianie kontekstu i rozmiaru testu

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

Aby zapewnić kontekst, możesz użyć dowolnej platformy testów jednostkowych na Androida opartej na JVM, np. Robolectric.

Jeśli funkcja kompozycyjna uzyskuje dostęp do LocalSize, przed podaniem funkcji kompozycyjnej w teście ustaw zamierzony rozmiar. Domyślny rozmiar to 349 dp × 455 dp, co odpowiada widżetowi 5x4 wyświetlanemu na urządzeniu Pixel 4 w trybie pionowym.

  • Jeśli widżet aplikacji korzysta z sizeMode == Single, możesz ustawić te wartości w minWidthminHeight w pliku info.xml widżetu.
  • Jeśli Twój widżet aplikacji korzysta z sizeMode == Exact, możesz określić rozmiary do przetestowania w podobny sposób, jak określasz rozmiar widżetu. Możesz też określić rozmiary w orientacji poziomej i pionowej, w których może się wyświetlać widżet, i przeprowadzić testy dla tych rozmiarów.
  • Jeśli Twój widżet aplikacji korzysta z parametru sizeMode == Responsive, możesz ustawić jeden z rozmiarów z listy podanej podczas określania parametru sizeMode.

Domyślny czas oczekiwania na test to 1 sekunda, ale możesz przekazać niestandardowy czas oczekiwania jako argument do metody runGlanceAppWidgetUnitTest, jeśli Twoja infrastruktura testowa wymusza inny czas oczekiwania.

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