Interoperacyjność

Narzędzie Compose integruje się z popularnymi platformami testowania.

Interoperacyjność z Espresso

W aplikacji hybrydowej komponenty Compose można znaleźć wewnątrz hierarchii widoków i widoków w funkcjach kompozycyjnych Compose (za pomocą funkcji kompozycyjnej AndroidView).

Aby dopasować oba typy, nie musisz wykonywać żadnych specjalnych kroków. Widoki dopasowujesz do elementów onView Espresso, a elementy Utwórz – za pomocą 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()))
}

Interoperacyjność z UiAutomator

Domyślnie elementy kompozycyjne są dostępne w UiAutomator tylko przez ich wygodne deskryptory (wyświetlany tekst, opis treści itp.). Jeśli chcesz uzyskać dostęp do funkcji kompozycyjnej używającej funkcji Modifier.testTag, musisz włączyć właściwość semantyczną testTagsAsResourceId dla konkretnego poddrzewa tej funkcji. Włączenie tego działania jest przydatne w przypadku elementów kompozycyjnych, które nie mają żadnego innego unikalnego uchwytu, takich jak elementy kompozycyjne z możliwością przewijania (np. LazyColumn).

Włącz właściwość semantyczną tylko raz na najwyższym poziomie w hierarchii elementów kompozycyjnych, aby mieć pewność, że wszystkie zagnieżdżone funkcje kompozycyjne korzystające z funkcji Modifier.testTag będą dostępne w usłudze 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
    }
}

Wszystkie funkcje kompozycyjne korzystające z funkcji Modifier.testTag(tag) mogą być dostępne przy użyciu klasy By.res(resourceName) i takiej samej klasy tag jak resourceName.

.
val device = UiDevice.getInstance(getInstrumentation())

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

Dodatkowe materiały

  • Testowanie aplikacji na Androida: główna strona docelowa testowania na Androida zawiera szersze omówienie podstaw i technik testowania.
  • Podstawy testowania: dowiedz się więcej o podstawowych założeniach testowania aplikacji na Androida.
  • Testy lokalne: niektóre testy możesz przeprowadzić lokalnie, na swojej stacji roboczej.
  • Testy instrumentowane: warto też przeprowadzać testy instrumentowane. Chodzi o testy przeprowadzane bezpośrednio na urządzeniu.
  • Tryb ciągłej integracji: tryb ciągłej integracji umożliwia integrację testów z potokiem wdrażania.
  • Przetestuj różne rozmiary ekranów: warto przetestować różne rozmiary ekranów w przypadku dużej liczby urządzeń dostępnych dla użytkowników.
  • Espresso: chociaż wiedza o Espresso jest przeznaczona dla interfejsu opartego na widoku, może okazać się przydatna w niektórych aspektach testowania funkcji Compose.