Модульное тестирование с помощью Glance

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'
testImplementation 'org.robolectric:robolectric:4.11.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

Структура теста

Организуйте компонуемые функции вне класса GlanceAppWidget , чтобы обеспечить повторное использование кода и модульное тестирование. Уменьшите сложность тестируемых модулей настолько, насколько это возможно.

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)
    }
}

Установите контекст и размер для теста

Если ваша составная функция считывает контекст с помощью метода 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 .