Совместимость

Compose интегрируется с распространенными средами тестирования.

Совместимость с эспрессо

В гибридном приложении вы можете найти компоненты Compose внутри иерархий представлений и представления внутри компонуемых объектов Compose (через компонуемый объект AndroidView ).

Для соответствия любому типу не требуется никаких специальных действий. Вы сопоставляете представления с помощью onView Espresso, а элементы Compose — с помощью ComposeTestRule .

@Test
fun androidViewInteropTest() {
    // Check the initial state of a TextView that depends on a Compose state.
    Espresso.onView(withText("Hello Views")).check(matches(isDisplayed()))
    // Click on the Compose button that changes the state.
    composeTestRule.onNodeWithText("Click here").performClick()
    // Check the new value.
    Espresso.onView(withText("Hello Compose")).check(matches(isDisplayed()))
}

Совместимость с UiAutomator

По умолчанию компонуемые объекты доступны из UiAutomator только по их удобным дескрипторам (отображаемому тексту, описанию содержимого и т. д.). Если вы хотите получить доступ к любому составному объекту, использующему Modifier.testTag , вам необходимо включить семантическое свойство testTagsAsResourceId для поддерева конкретного составного объекта. Включение этого поведения полезно для составных объектов, у которых нет другого уникального дескриптора, например для прокручиваемых составных объектов (например, LazyColumn ).

Включайте семантическое свойство только один раз на самом верху иерархии составных объектов, чтобы гарантировать, что все вложенные составные объекты с Modifier.testTag доступны из UiAutomator.

Scaffold(
    // Enables for all composables in the hierarchy.
    modifier = Modifier.semantics {
        testTagsAsResourceId = true
    }
){
    // Modifier.testTag is accessible from UiAutomator for composables nested here.
    LazyColumn(
        modifier = Modifier.testTag("myLazyColumn")
    ){
        // Content
    }
}

Любой компонуемый объект с Modifier.testTag(tag) может быть доступен с помощью By.res(resourceName) с использованием того же tag , что и resourceName .

val device = UiDevice.getInstance(getInstrumentation())

val lazyColumn: UiObject2 = device.findObject(By.res("myLazyColumn"))
// Some interaction with the lazyColumn.

Дополнительные ресурсы

  • Тестирование приложений на Android . На главной целевой странице тестирования Android представлено более широкое представление об основах и методах тестирования.
  • Основы тестирования . Узнайте больше об основных концепциях тестирования приложений для Android.
  • Локальные тесты : некоторые тесты можно запускать локально, на своей рабочей станции.
  • Инструментальные тесты . Рекомендуется также проводить инструментальные тесты. То есть тесты, которые запускаются непосредственно на устройстве.
  • Непрерывная интеграция . Непрерывная интеграция позволяет интегрировать тесты в конвейер развертывания.
  • Тестируйте разные размеры экрана . Поскольку пользователям доступно множество устройств, вам следует протестировать разные размеры экрана.
  • Espresso : Хотя знания Espresso предназначены для пользовательских интерфейсов на основе View, они все же могут быть полезны для некоторых аспектов тестирования Compose.