Interoperacyjność

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

Interoperacyjność z Espresso

W aplikacji hybrydowej komponenty Utwórz w hierarchii widoków widoków w funkcjach kompozycyjnych AndroidView.

Aby dopasować oba typy, nie musisz wykonywać żadnych specjalnych kroków. Dopasowujesz liczbę wyświetleń za pomocą: Elementy onView Espresso oraz Utwórz wiadomość za pomocą przycisku 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 funkcje kompozycyjne są dostępne w UiAutomator tylko przez: wygodnych deskryptorów (wyświetlany tekst, opis treści itp.). Jeśli chcesz aby uzyskać dostęp do funkcji kompozycyjnej, która używa funkcji Modifier.testTag, musisz włączyć właściwość semantyczną testTagsAsResourceId dla konkretnego elementu kompozycyjnego poddrzewa. Włączenie tego zachowania jest przydatne w przypadku elementów kompozycyjnych, które nie zawierają żadnych inny unikalny uchwyt, taki jak przewijane elementy kompozycyjne (np. LazyColumn).

Włącz właściwość semantyczną tylko raz na najwyższym poziomie w hierarchii elementów kompozycyjnych, aby upewnij się, że wszystkie zagnieżdżone funkcje kompozycyjne korzystające z funkcji Modifier.testTag są dostępne z 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 interfejsu API z By.res(resourceName) przy użyciu tego samego tag co 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 Androidzie: główne testy na Androidzie. daje szersze spojrzenie na podstawy i techniki testowania.
  • Podstawy testowania: więcej informacji o podstawowych koncepcjach testowania aplikacji na Androida.
  • Testy lokalne: możesz przeprowadzić testy. lokalnie, na własnej stacji roboczej.
  • Testy instrumentowane: są dobre. w ramach testów instrumentalnych. Oznacza to, że testy przeprowadzane bezpośrednio na urządzeniu.
  • Tryb ciągłej integracji: Tryb ciągłej integracji umożliwia integrowanie testów we wdrożeniu potoku.
  • Testowanie różnych rozmiarów ekranu: za pomocą dostępnych dla użytkowników jest bardzo wiele urządzeń, należy przetestować różne urządzenia rozmiarów reklam Google Ads.
  • Espresso: chociaż jest przeznaczony do obsługi widoków Interfejsy użytkownika i język espresso mogą też być przydatne w niektórych aspektach funkcji Compose i testowania.