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
Organisieren Sie zusammensetzbare Funktionen außerhalb der Klasse GlanceAppWidget
, um die Wiederverwendung von Code und das Testen von Einheiten 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 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 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 derinfo.xml
-Datei des Widgets aufminWidth
undminHeight
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 vonsizeMode
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
.