Pengujian unit dengan Glance

API pengujian unit Glance memungkinkan Anda menguji kode Glance tanpa meng-inflate tampilan atau memerlukan otomatisasi UI. Misalnya, API pengujian unit memungkinkan Anda memverifikasi kondisi, seperti apakah elemen ada dalam daftar atau apakah kotak telah dicentang, menggunakan matcher seperti hasContentDescriptionEqualTo atau isChecked.

API ini ringan dan memerlukan lebih sedikit penyiapan, sehingga Anda dapat melakukan pengembangan berdasarkan pengujian saat mengembangkan setiap bagian widget dan mengaturnya untuk meningkatkan penggunaan ulang kode.

Penyiapan

Dependensi yang diperlukan untuk menggunakan library pengujian unit ditunjukkan dalam contoh berikut:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.0'
testImplementation 'androidx.glance:glance-AppWidget-testing:1.1.0'
testImplementation 'org.robolectric:robolectric:4.11.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

Uji struktur

Atur fungsi composable di luar class GlanceAppWidget untuk mengaktifkan penggunaan kembali kode dan pengujian unit. Kurangi kompleksitas unit yang sedang diuji sebanyak mungkin.

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasAuthorAsSubtitle() = runGlanceAppWidgetUnitTest {
        // Prepare inputs and state
        setAppWidgetSize(100.dp, 100.dp)

        // Set the composable under test
        provideComposable {
            MyNewsItemComposable(TEST_NEWS_ITEM)
        }

        // Perform assertions
        onNode(hasTestTag("subTitle"))
            .assertHasText(TEST_NEWS_ITEM.authorName)
    }
}

Menetapkan konteks dan ukuran untuk pengujian

Jika fungsi composable Anda membaca konteks menggunakan metode LocalContext.current(), Anda harus menetapkan konteks menggunakan metode LocalContext.current(). Jika tidak, langkah ini bersifat opsional.

Anda dapat menggunakan framework pengujian unit Android berbasis JVM apa pun, seperti Roboletric, untuk menyediakan konteks.

Jika fungsi composable Anda mengakses LocalSize, tetapkan ukuran yang diinginkan untuk pengujian sebelum menyediakan composable dalam pengujian. Ukuran defaultnya adalah 349.dp x 455.dp, yang setara dengan widget 5x4 yang ditampilkan di perangkat Pixel 4 dalam mode potret.

  • Jika AppWidget menggunakan sizeMode == Single, Anda dapat menetapkannya ke minWidth dan minHeight dalam file info.xml widget.
  • Jika AppWidget menggunakan sizeMode == Exact, Anda dapat mengidentifikasi ukuran yang akan diuji dengan cara yang serupa dengan cara menentukan ukuran widget serta mengidentifikasi ukuran lanskap dan potret yang mungkin menampilkan widget Anda dan mengujinya untuk ukuran tersebut.
  • Jika AppWidget menggunakan sizeMode == Responsive, Anda dapat menetapkannya ke salah satu ukuran dari daftar yang Anda sediakan saat menentukan sizeMode.

Durasi default untuk waktu tunggu pengujian adalah 1 detik, tetapi Anda dapat meneruskan durasi kustom sebagai argumen ke metode runGlanceAppWidgetUnitTest jika infrastruktur pengujian Anda menerapkan waktu tunggu yang berbeda.

Untuk mengetahui informasi dan contoh kode selengkapnya, lihat dokumentasi referensi untuk runGlanceAppWidgetUnitTest.