Interoperabilitas

Compose terintegrasi dengan framework pengujian umum.

Interoperabilitas dengan Espresso

Dalam aplikasi campuran, Anda dapat menemukan komponen Compose di dalam hierarki tampilan dan di dalam composable Compose (melalui composable AndroidView).

Tidak memerlukan langkah khusus untuk mencocokkan salah satu jenisnya. Anda mencocokkan penayangan dengan Elemen onView dan Compose Espresso dengan 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()))
}

Interoperabilitas dengan UiAutomator

Secara default, composable dapat diakses dari UiAutomator hanya dengan deskripsi yang mudah digunakan (teks yang ditampilkan, deskripsi konten, dll.). Jika Anda ingin untuk mengakses composable yang menggunakan Modifier.testTag, Anda harus mengaktifkan properti semantik testTagsAsResourceId untuk composable tertentu sub hierarki. Mengaktifkan perilaku ini berguna untuk composable yang tidak memiliki handle unik lainnya, seperti composable yang dapat di-scroll (misalnya, LazyColumn).

Aktifkan properti semantik hanya sekali di hierarki composable untuk memastikan semua composable bertingkat dengan Modifier.testTag dapat diakses dari 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
    }
}

Setiap composable dengan Modifier.testTag(tag) dapat diakses dengan penggunaan dari By.res(resourceName) menggunakan tag yang sama seperti resourceName.

val device = UiDevice.getInstance(getInstrumentation())

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

Referensi Tambahan

  • Menguji aplikasi di Android: Pengujian Android utama memberikan pandangan yang lebih luas tentang dasar-dasar dan teknik pengujian.
  • Dasar-dasar pengujian: Pelajari lebih lanjut konsep inti di balik pengujian aplikasi Android.
  • Pengujian lokal: Anda dapat menjalankan beberapa pengujian secara lokal, di {i>workstation<i} Anda sendiri.
  • Pengujian berinstrumen: Bagus juga untuk menjalankan uji instrumentasi. Yaitu, pengujian yang berjalan secara langsung di perangkat.
  • Continuous integration: Dengan continuous integration, Anda dapat mengintegrasikan pengujian ke dalam deployment {i>pipelines<i} yang sama.
  • Menguji berbagai ukuran layar: Dengan beberapa perangkat yang tersedia untuk pengguna, Anda harus mengujinya pada layar ukuran.
  • Espresso: Meskipun ditujukan untuk berbasis View UI, pengetahuan Espresso masih dapat membantu untuk beberapa aspek Compose pengujian.