Testowanie jednostkowe za pomocą funkcji Glance

Interfejs API testów jednostkowych Glance umożliwia testowanie kodu Glance bez konieczności powiększania widoków ani używania narzędzia UI Automator. 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 wyboru zostały zaznaczone, za pomocą dopasowań takich jak hasContentDescriptionEqualTo lub isChecked.

Ten interfejs API jest lekki i wymaga mniej konfiguracji, dzięki czemu możesz przeprowadzać testy w trakcie 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 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

Aby umożliwić ponowne wykorzystanie kodu i testowanie jednostkowe, uporządkuj funkcje kompozycyjne poza klasą GlanceAppWidget. Zmniejsz stopień złożoności testowanych jednostek tak bardzo, jak to możliwe.

Możesz kierować test na element kompozycyjny za pomocą funkcji provideComposable i uruchamiać testy jednostkowe na jednym lub kilku węzłach Glance za pomocą odpowiednio funkcji 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" },
            )
        }
    }
}

Ustawianie kontekstu i rozmiaru na potrzeby testu

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

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

Jeśli funkcja typu „composable” uzyskuje dostęp do LocalSize, przed podaniem elementu kompozycyjnego w teście ustaw zamierzony rozmiar na potrzeby 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 pionowym.

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

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