Interoperacyjność

Funkcja tworzenia umożliwia integrację z popularnymi platformami do testowania.

Obsługa espresso

W aplikacji hybrydowej komponenty Utwórz znajdują się w hierarchii widoków i w widokach tego elementu (za pomocą funkcji kompozycyjnej AndroidView).

Dopasowanie żadnego z tych typów nie wymaga żadnych dodatkowych czynności. Widoki dopasowujesz do elementów onView usługi Espresso, a elementów Utwórz – z 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, która korzysta z Modifier.testTag, musisz włączyć właściwość semantyczną testTagsAsResourceId w poddrzewie danego elementu kompozycyjnego. Jest to przydatne w przypadku funkcji kompozycyjnych, które nie mają innego unikalnego nicku, np. przewijanych elementów kompozycyjnych (np. LazyColumn).

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

Każdy element kompozycyjny z funkcją Modifier.testTag(tag) może być dostępny przy użyciu funkcji By.res(resourceName), która korzysta z tego samego elementu tag co element 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 aplikacji na Androida zapewnia szerszy wgląd w podstawy i techniki testowania.
  • Podstawy testowania: dowiedz się więcej o podstawowych pojęciach związanych z testowaniem aplikacji na Androida.
  • Testy lokalne: niektóre testy możesz przeprowadzić lokalnie na własnej stacji roboczej.
  • Testy z instrumentacją: warto też przeprowadzać testy z użyciem instrumentów. Oznacza to, że testy przeprowadzane bezpośrednio na urządzeniu.
  • Tryb ciągłej integracji: tryb ciągłej integracji umożliwia integrację testów z potokiem wdrożenia.
  • Testowanie różnych rozmiarów ekranu: użytkownicy mają do dyspozycji wiele urządzeń, dlatego warto przetestować różne rozmiary ekranów.
  • Espresso: to narzędzie jest przeznaczone dla użytkowników korzystających z widoku danych, ale wiedza o espresso może być pomocna w niektórych aspektach testowania funkcji Compose.