Pengujian unit dengan Glance

API pengujian unit Glance memungkinkan Anda menguji kode Glance tanpa meng-inflate tampilan atau membutuhkan UI {i>automator<i}. Misalnya, API pengujian unit memungkinkan Anda memverifikasi kondisi, seperti apakah elemen berada dalam daftar atau apakah kotak-kotak telah dicentang, menggunakan pencocok seperti hasContentDescriptionEqualTo atau isChecked.

API ini ringan dan memerlukan lebih sedikit penyiapan, sehingga Anda dapat melakukan pengujian berdasarkan saat Anda 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

Mengatur fungsi composable di luar class GlanceAppWidget untuk mengaktifkan penggunaan ulang kode dan pengujian unit. Kurangi kerumitan unit yang sedang diuji dengan 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 LocalContext.current() , Anda harus menetapkan konteks menggunakan metode LocalContext.current(). Jika tidak, langkah ini bersifat opsional.

Anda bisa menggunakan framework pengujian unit Android berbasis JVM, seperti Roboletric, untuk memberikan 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 Anda.
  • Jika AppWidget menggunakan sizeMode == Exact, Anda dapat mengidentifikasi ukuran untuk uji dengan cara yang sama seperti cara Anda menentukan ukuran widget dan mengidentifikasi ukuran lanskap dan potret yang mungkin menampilkan widget Anda dan menguji kepada mereka.
  • Jika AppWidget menggunakan sizeMode == Responsive, Anda dapat menyetelnya ke salah satu ukuran dari daftar yang Anda berikan saat menetapkan sizeMode.

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

Untuk informasi dan contoh kode lebih lanjut, lihat dokumentasi referensi untuk runGlanceAppWidgetUnitTest