Interoperacyjność

Compose integruje się z popularnymi platformami testowymi.

Interoperacyjność z Espresso

W aplikacji hybrydowej komponenty Compose znajdziesz w hierarchiach widoków, a widoki w komponentach Compose (za pomocą komponentu AndroidView).

Dopasowanie do obu typów nie wymaga żadnych specjalnych działań. Wyświetlania są dopasowywane do widoków w Espresso (onView), a elementy do komponowania – do widoków w komponowaniu (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 kompozytowe są dostępne w UiAutomator tylko pod nazwą (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 w hierarchii komponentów, aby mieć pewność, że wszystkie zagnieżdżone komponenty z Modifier.testTag są 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
    }
}

Wszystkie funkcje kompozycyjne z Modifier.testTag(tag) mogą być dostępne przy użyciu klasy By.res(resourceName) i tego samego elementu 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 Androida: główna strona z informacjami o testowaniu na Androida zawiera więcej informacji o podstawach i technikach testowania.
  • Podstawy testowania: dowiedz się więcej o podstawowych koncepcjach testowania aplikacji na Androida.
  • Testy lokalne: niektóre testy możesz przeprowadzać lokalnie na swoim komputerze.
  • Testy z instrumentacją: warto też przeprowadzać testy z instrumentacją. Chodzi o testy, które są wykonywane bezpośrednio na urządzeniu.
  • Tryb ciągłej integracji: tryb ciągłej integracji umożliwia zintegrowanie testów z potokiem wdrożeniowym.
  • Testowanie różnych rozmiarów ekranu: ze względu na dużą liczbę urządzeń dostępnych dla użytkowników, należy przeprowadzić testy na różnych rozmiarach ekranu.
  • Espresso: chociaż jest ono przeznaczone do interfejsów użytkownika opartych na widokach, znajomość Espresso może być przydatna w niektórych aspektach testowania w Compose.