Testowanie jednostkowe za pomocą funkcji Glance

Interfejs API do testów jednostkowych Glance umożliwia testowanie kodu Glance bez zwiększania liczby wyświetleń ani konieczności użycia automatyzatora UI. Interfejs API do testów jednostkowych umożliwia na przykład sprawdzanie warunków, takich jak to, czy elementy znajdują się na liście lub czy pola są zaznaczone, przy użyciu elementów dopasowywania, 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.

Konfiguruj

Zależności wymagane do korzystania z biblioteki testów jednostkowych przedstawiono w następujących 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.

Przetestuj strukturę

Uporządkuj funkcje kompozycyjne poza klasą GlanceAppWidget, aby umożliwić ponowne użycie kodu i testowanie jednostkowe. Maksymalnie zmniejsz złożoność testowanych jednostek.

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 kompozycyjna odczytuje kontekst za pomocą metody LocalContext.current(), musisz ustawić kontekst przy użyciu metody LocalContext.current(). W przeciwnym razie ten krok jest opcjonalny.

Aby uzyskać kontekst, możesz użyć dowolnej platformy do testowania jednostkowego Androida opartego na JVM, na przykład Roboletric.

Jeśli funkcja kompozycyjna uzyskuje dostęp do klasy LocalSize, przed udostępnieniem w teście 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 funkcji sizeMode == Single, możesz ustawić wartość minWidth i minHeight 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 widżet AppWidget korzysta z elementu sizeMode == Responsive, możesz ustawić jeden z rozmiarów z listy, którą podajesz podczas określania właściwości sizeMode.

Domyślny czas oczekiwania testu to 1 sekunda, ale możesz przekazać niestandardowy czas trwania jako argument w metodzie runGlanceAppWidgetUnitTest, jeśli infrastruktura testowa wymusza inny limit czasu.

Więcej informacji i przykładowy kod znajdziesz w dokumentacji referencyjnej runGlanceAppWidgetUnitTest.