Einheitentests mit „ Glance“

Mit der Glance-Einheitentest-API können Sie Ihren Glance-Code testen, ohne die Ansichten zu erhöhen oder ein UI-Automatisierungstool zu benötigen. Mit der Unit Test API können Sie beispielsweise mithilfe von Matchern wie hasContentDescriptionEqualTo oder isChecked Bedingungen prüfen, z. B. ob Elemente in einer Liste enthalten sind oder ob Kästchen angeklickt wurden.

Diese API ist einfach und erfordert weniger Einrichtung. Sie können also eine testgesteuerte Entwicklung durchführen, während Sie einzelne Teile Ihres Widgets entwickeln und organisieren, um die Wiederverwendung von Code zu verbessern.

Einrichten

Die folgenden Beispiele zeigen die für die Verwendung der Einheitentestbibliothek erforderlichen Abhängigkeiten:

// 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.

Teststruktur

Organisieren Sie zusammensetzbare Funktionen außerhalb der Klasse GlanceAppWidget, um die Wiederverwendung von Code und das Testen von Einheiten zu ermöglichen. Reduzieren Sie die Komplexität der zu testenden Einheiten so weit wie möglich.

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)
    }
}

Kontext und Größe für den Test festlegen

Wenn die zusammensetzbare Funktion den Kontext mit der Methode LocalContext.current() liest, müssen Sie einen Kontext mit der Methode LocalContext.current() festlegen. Andernfalls ist dieser Schritt optional.

Sie können ein beliebiges JVM-basiertes Framework für Android-Einheitentests wie etwa Roboletric verwenden, um den Kontext bereitzustellen.

Wenn Ihre zusammensetzbare Funktion auf LocalSize zugreift, legen Sie die gewünschte Größe für den Test fest, bevor Sie im Test eine zusammensetzbare Funktion bereitstellen. Die Standardgröße ist 349 dp × 455 dp. Dies entspricht einem 5 × 4-Widget, das auf einem Pixel 4 im Hochformat angezeigt wird.

  • Wenn dein AppWidget sizeMode == Single verwendet, kannst du dies in der Datei info.xml deines Widgets auf minWidth und minHeight festlegen.
  • Wenn dein AppWidget sizeMode == Exact verwendet, kannst du die zu testenden Größen auf ähnliche Weise wie eine Größe für dein Widget bestimmen und Größen im Quer- und Hochformat ermitteln, in denen dein Widget angezeigt werden kann, und für sie testen.
  • Wenn dein AppWidget sizeMode == Responsive verwendet, kannst du dafür eine der Größen aus der Liste festlegen, die du beim Festlegen von sizeMode angibst.

Die Standarddauer für ein Testzeitlimit beträgt 1 Sekunde. Sie können jedoch eine benutzerdefinierte Dauer als Argument an die Methode runGlanceAppWidgetUnitTest übergeben, wenn Ihre Testinfrastruktur ein anderes Zeitlimit erzwingt.

Weitere Informationen und Codebeispiele finden Sie in der Referenzdokumentation zu runGlanceAppWidgetUnitTest.