Menguji fragmen aplikasi Anda

Fragmen berfungsi sebagai container yang dapat digunakan kembali dalam aplikasi Anda, yang memungkinkan Anda untuk menyajikan layout antarmuka pengguna yang sama dalam berbagai kegiatan dan konfigurasi layout . Mengingat fleksibilitas fragmen-fragmen ini, penting untuk memvalidasi bahwa fragmen-fragmen tersebut memberikan pengalaman yang konsisten dan hemat resource:

  • Tampilan fragmen Anda harus konsisten di berbagai konfigurasi layout, termasuk yang mendukung ukuran layar yang lebih besar atau orientasi perangkat lanskap.
  • Jangan membuat hierarki tampilan fragmen kecuali jika fragmen tersebut dapat dilihat oleh pengguna.

Dokumen ini menjelaskan cara menyertakan API yang disediakan framework dalam pengujian yang mengevaluasi perilaku setiap fragmen.

Mendorong status fragmen

Untuk membantu menyiapkan kondisi untuk melakukan uji ini, AndroidX menyediakan perpustakaan, FragmentScenario, untuk membuat fragmen dan mengubah statusnya.

Mengonfigurasi lokasi artefak pengujian

Untuk menggunakan FragmentScenario sebagaimana dimaksud, tentukan artefak pengujian-fragmen di APK pengujian aplikasi Anda, seperti yang diperlihatkan dalam cuplikan kode berikut:

app/build.gradle

dependencies {
    // ...
    debugImplementation 'androidx.fragment:fragment-testing:1.1.0-alpha07'
}

Membuat fragmen

FragmentScenario termasuk metode untuk meluncurkan jenis fragmen berikut:

Metode ini juga mendukung jenis fragmen berikut:

  • Graphical fragments, yang berisi antarmuka pengguna. Untuk meluncurkan jenis fragmen ini, panggil launchFragmentInContainer(). FragmentScenario melampirkan fragmen ke pengontrol tampilan root aktivitas. Aktivitas yang memuat ini kosong.
  • Non-grafis fragments (kadang-kadang disebut sebagai _headless fragments _), yang menyimpan atau melakukan pemrosesan jangka pendek pada informasi yang termasuk dalam banyak kegiatan. Untuk meluncurkan jenis fragmen ini, panggil launchFragment(). FragmentScenario melampirkan jenis fragmen ini ke aktivitas yang sepenuhnya kosong, yang tidak memiliki tampilan root.

Setelah meluncurkan salah satu dari jenis fragmen ini, FragmentScenario mendorong fragmen yang sedang diuji ke status RESUMED. Status ini menunjukkan bahwa fragmen sedang berjalan. Jika Anda sedang menguji fragmen grafis, fragmen tersebut juga dapat dilihat oleh pengguna, sehingga Anda dapat mengevaluasi informasi tentang elemen UI-nya dengan menggunakan Pengujian UI Espresso.

Cuplikan kode berikut menunjukkan cara meluncurkan setiap jenis fragmen:

Contoh fragmen grafis

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        // The "state" and "factory" arguments are optional.
        val fragmentArgs = Bundle().apply {
            putInt("selectedListItem", 0)
        }
        val factory = MyFragmentFactory()
        val scenario = launchFragmentInContainer<MyFragment>(
                fragmentArgs, factory)
        onView(withId(R.id.text)).check(matches(withText("Hello World!")))
    }
}

Contoh fragmen non-grafis

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        // The "state" and "factory" arguments are optional.
        val fragmentArgs = Bundle().apply {
            putInt("numElements", 0)
        }
        val factory = MyFragmentFactory()
        val scenario = launchFragment<MyFragment>(fragmentArgs, factory)
    }
}

Membuat kembali fragmen

Jika sebuah perangkat tidak cukup resource, sistem mungkin merusak aktivitas yang memuat fragmen Anda, yang mengharuskan aplikasi Anda untuk membuat ulang fragmen ketika pengguna tersebut kembali ke aplikasi Anda. Untuk mensimulasikan situasi ini, panggil recreate():

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        scenario.recreate()
    }
}

Ketika kelas FragmentScenario membuat ulang fragmen yang sedang diuji, fragmen kembali ke status lifecycle yang sebelumnya ada sebelum dibuat ulang.

Mendorong fragmen ke status baru

Dalam pengujian UI aplikasi Anda, biasanya cukup untuk sekadar meluncurkan dan membuat ulang fragmen yang sedang diuji. Namun, dalam pengujian unit berbutir halus, Anda mungkin juga perlu mengevaluasi perilaku fragmen karena bertransisi dari satu status lifecycle ke status lainnya.

Untuk mendorong fragmen ke beragam status lifecycle, hubungi moveToState(). Metode ini mendukung status berikut sebagai argumen: CREATED, STARTED, RESUMED, dan DESTROYED. Tindakan ini mensimulasikan situasi ketika aktivitas yang berisi fragmen Anda mengubah statusnya karena terganggu oleh aplikasi lain atau oleh tindakan sistem.

Contoh penggunaan moveToState() muncul dalam cuplikan kode berikut:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        scenario.moveToState(State.CREATED)
    }
}

Memicu tindakan dalam fragmen

Untuk memicu tindakan dalam fragmen yang sedang Anda uji, gunakan pencocokan tampilan Espresso berinteraksi dengan elemen dalam tampilan Anda:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        onView(withId(R.id.refresh))
                .perform(click())
    }
}

Jika Anda perlu memanggil metode pada fragmen itu sendiri, seperti menanggapi pilihan di menu opsi, Anda dapat melakukannya dengan aman dengan menerapkan FragmentAction:

@RunWith(AndroidJUnit4::class)
class MyTestSuite {
    @Test fun testEventFragment() {
        val scenario = launchFragmentInContainer<MyFragment>()
        scenario.onFragment(fragment ->
            fragment.onOptionsItemSelected(clickedItem) {
                // Update fragment's state based on selected item.
            }
        }
    }
}