API модульного тестирования Glance позволяет тестировать код Glance без раздувания представлений или необходимости использования автоматизатора пользовательского интерфейса. Например, API модульного тестирования позволяет проверять условия, такие как наличие элементов в списке или установку флажков, с помощью сопоставителей, таких как hasContentDescriptionEqualTo или isChecked.
Этот API не требует сложной настройки, поэтому вы можете использовать разработку через тестирование, создавая отдельные части виджета и организуя их так, чтобы улучшить повторное использование кода.
Настроить
Зависимости, необходимые для использования библиотеки модульного тестирования, показаны в следующих примерах:
// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.
Структура теста
Организуйте composable-функции за пределами класса GlanceAppWidget, чтобы обеспечить повторное использование кода и модульное тестирование. Максимально упростите тестируемые блоки.
Вы можете настроить таргетинг на тестовую composable-функцию с помощью provideComposable и запустить модульные тесты на одном или нескольких узлах Glance с помощью onNode или onAllNodes соответственно.
private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!" class MyGlanceComposableTest { @Test fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest { // Set the composable to test provideComposable { MyNewsItemComposable(FAKE_HEADLINE) } // Perform assertions onNode(hasTestTag("headline")) .assertHasText(FAKE_HEADLINE) } @Composable fun MyNewsItemComposable(headline: String) { Row { Text( text = headline, modifier = GlanceModifier.semantics { testTag = "headline" }, ) } } }
Задайте контекст и размер тестирования
Если composable-функция считывает контекст с помощью метода LocalContext.current(), необходимо задать контекст с помощью setContext(). В противном случае этот шаг можно пропустить.
Для предоставления контекста можно использовать любой фреймворк модульного тестирования Android на основе JVM, например Robolectric.
Если ваша composable-функция обращается к LocalSize, задайте нужный размер для теста, прежде чем предоставлять composable-функцию в тесте. Размер по умолчанию – 349 x 455 dp, что эквивалентно виджету 5 x 4 на устройстве Pixel 4 в портретном режиме.
- Если в AppWidget используется
sizeMode == Single, вы можете задать для этого параметра значенияminWidthиminHeightв файлеinfo.xmlвиджета. - Если в виджете используется
sizeMode == Exact, вы можете определить размеры для тестирования так же, как определяете размер виджета. Определите размеры для альбомной и портретной ориентации, в которых может отображаться виджет, и протестируйте их. - Если в виджете используется
sizeMode == Responsive, вы можете выбрать один из размеров, указанных в спискеsizeMode.
По умолчанию время ожидания составляет одну секунду, но вы можете передать другое значение в качестве аргумента методу runGlanceAppWidgetUnitTest, если в вашей инфраструктуре тестирования используется другое время ожидания.
Дополнительную информацию и примеры кода можно найти в справочной документации по runGlanceAppWidgetUnitTest.