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 einen UI-Automator 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 sich Elemente in einer Liste befinden oder ob Kästchen angeklickt wurden.

Diese API ist schlanker und erfordert weniger Einrichtung. So können Sie eine testgetriebene Entwicklung durchführen, während Sie die einzelnen Teile Ihres Widgets entwickeln und so organisieren, dass die Codewiederverwendung verbessert wird.

Einrichten

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

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

Ordnen Sie kombinierbare Funktionen außerhalb der GlanceAppWidget-Klasse an, um die Codewiederverwendung und Unit-Tests zu ermöglichen. Verringern 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 Ihre 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 Android-Test-Framework wie 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 ein zusammensetzbares Element in den Test einfügen. Die Standardgröße ist 349,0 dp × 455,0 dp. Das entspricht einem 5 × 4 Pixel großen Widget, das auf einem Pixel 4 im Hochformat angezeigt wird.

  • Wenn Ihr App-Widget sizeMode == Single verwendet, können Sie dies in der info.xml-Datei des Widgets auf minWidth und minHeight festlegen.
  • Wenn für Ihr App-Widget sizeMode == Exact verwendet wird, können Sie die zu testenden Größen ähnlich wie bei der Bestimmung der Größe für Ihr Widget ermitteln. Außerdem können Sie die Größen für das Quer- und Hochformat festlegen, in denen Ihr Widget angezeigt werden kann, und diese testen.
  • Wenn in Ihrem App-Widget sizeMode == Responsive verwendet wird, können Sie eine der Größen aus der Liste festlegen, die Sie bei der Angabe von sizeMode angeben.

Die Standarddauer für einen Testzeitüberschreitungsfehler beträgt 1 Sekunde. Sie können der runGlanceAppWidgetUnitTest-Methode jedoch eine benutzerdefinierte Dauer als Argument übergeben, wenn Ihre Testinfrastruktur eine andere Zeitüberschreitung erzwingt.

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