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.
Структура теста
Организуйте компонуемые функции вне класса 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" }, ) } } }
Установите контекст и размер для теста
Если ваша компонуемая функция считывает контекст с помощью метода LocalContext.current()
, необходимо установить контекст с помощью setContext()
. В противном случае этот шаг необязателен.
Для предоставления контекста можно использовать любую платформу модульного тестирования Android на базе JVM, например Roboletric.
Если ваша компонуемая функция обращается к LocalSize
, задайте предполагаемый размер для теста, прежде чем предоставлять компонуемый элемент в тесте. Размер по умолчанию — 349.dp x 455.dp, что эквивалентно виджету 5x4, отображаемому на устройстве Pixel 4 в портретном режиме.
- Если ваш AppWidget использует
sizeMode == Single
, вы можете установить для него значенияminWidth
иminHeight
в файлеinfo.xml
вашего виджета. - Если ваш AppWidget использует
sizeMode == Exact
, вы можете определить размеры для тестирования аналогично тому, как вы определяете размер своего виджета, а также определить размеры альбомной и портретной ориентации, в которых может отображаться ваш виджет, и протестировать их. - Если ваш AppWidget использует
sizeMode == Responsive
, вы можете задать для него один из размеров из списка, который вы указали при указанииsizeMode
.
Длительность тестового тайм-аута по умолчанию составляет 1 секунду, но вы можете передать пользовательскую длительность в качестве аргумента методу runGlanceAppWidgetUnitTest
, если ваша тестовая инфраструктура требует другого тайм-аута.
Дополнительную информацию и примеры кода см. в справочной документации по runGlanceAppWidgetUnitTest
.