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