Testowanie jednostkowe za pomocą funkcji Glance

Interfejs API do testów jednostkowych Glance umożliwia testowanie kodu Glance bez zwiększania liczby wyświetleń lub automatyzator UI. Na przykład interfejs API do testów jednostkowych pozwala sprawdzić, warunków, takich jak to, czy elementy znajdują się na liście lub czy pola zostały zaznaczono za pomocą dopasowań, takich jak hasContentDescriptionEqualTo lub isChecked.

Ten interfejs API jest prostszy i wymaga mniej konfiguracji, dzięki czemu można przeprowadzać podczas opracowywania poszczególnych elementów widżetu i uporządkowania ich w taki sposób, żeby ułatwić ponowne używanie kodu.

Konfiguracja

Zależności wymagane do korzystania z biblioteki testów jednostkowych są wyświetlane w następujące przykłady:

// 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 włączyć ponowne używanie kodu i testowanie jednostkowe. Zmniejsz złożoność testowanych jednostek jako jak to tylko możliwe.

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ą funkcji LocalContext.current() musisz określić kontekst za pomocą metody LocalContext.current(). W przeciwnym razie ten krok jest opcjonalny.

Możesz użyć dowolnej platformy do testowania jednostkowego Androida opartego na JVM, takiej jak Roboletric, i zapewniają kontekst.

Jeśli funkcja kompozycyjna uzyskuje dostęp do elementu LocalSize, ustaw zamierzony rozmiar przed udostępnieniem elementu kompozycyjnego w teście. Rozmiar domyślny to 349,dp x 455,dp, co odpowiada widżetowi 5 x 4 wyświetlanym na urządzeniu Pixel 4 w trybie pionowym.

  • Jeśli Twój widżet AppWidget korzysta z atrybutu sizeMode == Single, możesz ustawić tę wartość na minWidth i minHeight w pliku info.xml widżetu.
  • Jeśli Twój widżet AppWidget korzysta z atrybutu sizeMode == Exact, możesz określić rozmiary, do których testuj w podobny sposób jak określanie rozmiaru widżetu oraz określić, w jakich rozmiarach może się pojawić Twój widżet w orientacji poziomej i pionowej, dla nich.
  • Jeśli Twój widżet AppWidget korzysta z atrybutu sizeMode == Responsive, możesz ustawić jedną z tych opcji: rozmiary z listy podanej podczas określania właściwości sizeMode.

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

Więcej informacji i przykładowe fragmenty kodu znajdziesz w dokumentacji runGlanceAppWidgetUnitTest