Einheitentests mit „ Glance“

Mit der Glance Unit Test API können Sie Ihren Glance-Code testen, ohne die Anzahl der Aufrufe zu erhöhen. oder ein UI-Automatisierungstool benötigen. Mit der Unit Test API können Sie beispielsweise z. B. ob Elemente in einer Liste enthalten sind oder ob Felder ausgewählt. Verwenden Sie dazu Matcher wie hasContentDescriptionEqualTo oder isChecked.

Diese API ist ressourcensparend und erfordert weniger Einrichtung, sodass Sie testgesteuerte bei der Entwicklung einzelner Widgets und der Organisation die Wiederverwendung von Code verbessern.

Einrichten

Die Abhängigkeiten, die für die Verwendung der Einheitentestbibliothek erforderlich sind, werden in der folgende Beispiele:

// 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 Funktion zu aktivieren. die Wiederverwendung von Code und Unittests. Reduzieren Sie die Komplexität der zu testenden Einheiten, 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 mithilfe der Funktion LocalContext.current() liest müssen Sie mit der Methode LocalContext.current() einen Kontext festlegen. Andernfalls ist dieser Schritt optional.

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

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

  • Wenn dein AppWidget sizeMode == Single verwendet, kannst du dies auf die minWidth und minHeight in der info.xml-Datei deines Widgets.
  • Wenn Ihr AppWidget sizeMode == Exact verwendet, können Sie die Größen identifizieren, auf ähnliche Weise, wie Sie eine Größe für Ihr Widget bestimmen und Größen im Quer- und Hochformat zu ermitteln, in denen Ihr Widget erscheinen kann, und testen Sie für sie.
  • Wenn dein AppWidget sizeMode == Responsive verwendet, kannst du dafür eines der folgenden Werte festlegen: die Größen aus der Liste, die Sie beim Angeben der sizeMode angeben.

Die Standarddauer für ein Testzeitlimit beträgt 1 Sekunde. Sie können jedoch einen benutzerdefinierten „duration“ als Argument an die Methode runGlanceAppWidgetUnitTest, wenn der Test erzwingt eine andere Zeitüberschreitung.

Weitere Informationen und Codebeispiele finden Sie in der Referenzdokumentation zu runGlanceAppWidgetUnitTest