Einheitentests mit „ Glance“

Mit der Glance-Einheitentest-API können Sie Ihren Glance-Code testen, ohne Ansichten zu rendern oder einen UI-Automator zu benötigen. Mit der API für Einheitentests können Sie beispielsweise Bedingungen wie „Sind Elemente in einer Liste?“ oder „Wurden Kästchen angekreuzt?“ mithilfe von Matchern wie hasContentDescriptionEqualTo oder isChecked überprüfen.

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

Einrichten

Die Abhängigkeiten, die für die Verwendung der Unit-Test-Bibliothek erforderlich sind, sind in den folgenden Beispielen aufgeführt:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
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 GlanceAppWidget-Klasse, um die Wiederverwendung von Code und Einheitentests 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 des Tests festlegen

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

Sie können ein beliebiges JVM-basiertes Android-Framework für Unit-Tests wie Robolectric 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 eine zusammensetzbare Funktion im Test bereitstellen. Die Standardgröße ist 349 dp × 455 dp. Das entspricht einem 5 × 4-Widget auf einem Pixel 4 im Hochformat.

  • Wenn Ihr App-Widget sizeMode == Single verwendet, können Sie dies in der info.xml-Datei Ihres Widgets auf minWidth und minHeight festlegen.
  • Wenn Ihr App-Widget sizeMode == Exact verwendet, können Sie die zu testenden Größen auf ähnliche Weise ermitteln wie beim Festlegen einer Größe für Ihr Widget. Ermitteln Sie die Größen im Quer- und Hochformat, in denen Ihr Widget möglicherweise angezeigt wird, und testen Sie es für diese Größen.
  • Wenn Ihr App-Widget sizeMode == Responsive verwendet, können Sie diese Option auf eine der Größen aus der Liste festlegen, die Sie beim Angeben von sizeMode bereitstellen.

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

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