Testowanie jednostkowe za pomocą funkcji Glance

Interfejs Glance Unit Test API umożliwia testowanie kodu Glance bez konieczności rozwijania widoków ani używania UI Automatora. Na przykład interfejs API testów jednostkowych umożliwia weryfikowanie warunków, takich jak obecność elementów na liście lub zaznaczenie pól, za pomocą dopasowań takich jak hasContentDescriptionEqualTo lub isChecked.

Ten interfejs API jest lekki i wymaga mniejszej konfiguracji, dzięki czemu możesz przeprowadzać programowanie sterowane testami podczas tworzenia poszczególnych elementów widżetu i porządkować je, aby ułatwić ponowne użycie kodu.

Konfiguracja

Zależności wymagane do korzystania z biblioteki testów jednostkowych są pokazane w tych przykładach:

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

Struktura testu

Uporządkuj funkcje typu „composable” poza klasą GlanceAppWidget, aby umożliwić ponowne użycie kodu i testowanie jednostkowe. Zmniejsz stopień złożoności testowanych jednostek, na ile to możliwe.

Możesz kierować test na funkcję Composable za pomocą provideComposable i uruchamiać testy jednostkowe na jednym lub kilku węzłach Glance, używając odpowiednio onNode lub onAllNodes.

private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!"

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest {
        // Set the composable to test
        provideComposable {
            MyNewsItemComposable(FAKE_HEADLINE)
        }

        // Perform assertions
        onNode(hasTestTag("headline"))
            .assertHasText(FAKE_HEADLINE)
    }


    @Composable
    fun MyNewsItemComposable(headline: String) {
        Row {
            Text(
                text = headline,
                modifier = GlanceModifier.semantics { testTag = "headline" },
            )
        }
    }
}

Ustaw kontekst i rozmiar testu

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

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

Jeśli funkcja typu „composable” uzyskuje dostęp do LocalSize, przed udostępnieniem jej w teście ustaw docelowy rozmiar testu. Domyślny rozmiar to 349 dp x 455 dp, co odpowiada widżetowi 5 x 4 wyświetlanemu na urządzeniu Pixel 4 w trybie portretowym.

  • Jeśli Twój AppWidget używa sizeMode == Single, możesz ustawić te wartości na minWidth i minHeight w pliku info.xml widżetu.
  • Jeśli Twój AppWidget używa sizeMode == Exact, możesz określić rozmiary do przetestowania w podobny sposób, jak określasz rozmiar widżetu, oraz określić rozmiary w orientacji poziomej i pionowej, w których widżet może się wyświetlać, i przetestować je.
  • Jeśli AppWidget używa sizeMode == Responsive, możesz ustawić jeden z rozmiarów z listy podanej podczas określania sizeMode.

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

Więcej informacji i przykładowe kody znajdziesz w dokumentacji referencyjnej runGlanceAppWidgetUnitTest.