Alternatif untuk Resource Nonaktif dalam pengujian Compose: waitUntil API (diperbarui)
3 menit untuk dibaca
Dalam artikel ini, Anda akan mempelajari cara menggunakan waitUntil test API di Compose untuk menunggu kondisi tertentu terpenuhi. Ini adalah alternatif yang baik untuk menggunakan Resource Nonaktif dalam beberapa situasi.
[Pembaruan 2023] Tldr: gunakan waitUntil API baru untuk melakukan sinkronisasi dalam pengujian Compose (v1.4.0+).
Apa yang dimaksud dengan sinkronisasi?
Salah satu cara untuk mengategorikan pengujian adalah berdasarkan cakupannya. Pengujian kecil, atau pengujian unit, berfokus pada bagian kecil aplikasi Anda, sedangkan pengujian besar, atau end-to-end, mencakup sebagian besar aplikasi Anda. Anda dapat membaca tentang hal ini dan jenis pengujian lainnya dalam dokumentasi pengujian yang baru diperbarui.
Tekan Enter atau klik untuk melihat gambar dalam ukuran penuh
Sinkronisasi adalah mekanisme yang memungkinkan pengujian mengetahui kapan harus menjalankan operasi berikutnya. Semakin besar bagian kode yang Anda pilih untuk diverifikasi, semakin sulit untuk disinkronkan dengan pengujian. Dalam pengujian unit, Anda dapat dengan mudah memiliki kontrol penuh atas eksekusi kode yang akan diverifikasi. Namun, saat kita memperluas cakupan untuk menyertakan lebih banyak class, modul, dan lapisan, framework pengujian akan kesulitan mengetahui apakah aplikasi sedang menjalankan operasi atau tidak.
Tekan Enter atau klik untuk melihat gambar dalam ukuran penuh
androidx.test dan, secara ekstensi, Compose Test, menggunakan beberapa trik di balik layar sehingga Anda tidak perlu terlalu khawatir tentang hal ini. Misalnya, jika thread utama sedang sibuk, pengujian akan dijeda hingga dapat menjalankan baris berikutnya.
Namun, mereka tidak dapat mengetahui segalanya. Misalnya, jika Anda memuat data di thread latar belakang, framework pengujian mungkin akan menjalankan operasi berikutnya terlalu cepat, sehingga pengujian Anda gagal. Situasi terburuk adalah ketika hal ini hanya terjadi dalam persentase kecil, sehingga pengujian menjadi tidak stabil.
Opsi 1: Resource Nonaktif
Resource Nonaktif adalah fitur Espresso yang memungkinkan Anda, developer, memutuskan kapan aplikasi sedang sibuk. Ada dua cara untuk menggunakannya:
1. Menginstalnya di framework atau library yang melakukan pekerjaan yang tidak dapat dilihat oleh pengujian.
Contoh yang baik untuk hal ini adalah RxIdler, yang menggabungkan penjadwal RxJava. Ini adalah cara yang lebih disukai untuk mendaftarkan Resource Nonaktif karena memungkinkan Anda memisahkan penyiapan pengujian dari kode pengujian secara bersih.
2. Memodifikasi kode yang sedang diuji untuk secara eksplisit mengekspos informasi tentang apakah aplikasi Anda sedang sibuk atau tidak.
Misalnya, Anda dapat mengubah repositori (atau test double) untuk menunjukkan bahwa repositori sedang sibuk saat memuat data dari sumber data:
Hal ini tidak ideal karena Anda mencemari kode produksi, atau membuat test double yang rumit, dan ada beberapa situasi ketika sulit untuk menginstalnya. Misalnya, bagaimana cara menggunakan Resource Nonaktif di Kotlin Flow? Pembaruan mana yang terakhir ?
Sebagai gantinya, kita dapat menunggu sesuatu.
Opsi 2: Menunggu sesuatu… dengan cara yang salah
Memuat data biasanya cepat, terutama saat menggunakan data palsu, jadi mengapa membuang waktu dengan resource nonaktif jika Anda dapat membuat pengujian tidur selama beberapa detik?
Pengujian ini akan berjalan lebih lambat dari yang diperlukan atau gagal. Jika memiliki ratusan atau ribuan pengujian UI, Anda ingin pengujian berjalan secepat mungkin.
Selain itu, terkadang emulator atau perangkat berperilaku tidak semestinya dan jank, sehingga operasi tersebut memerlukan waktu sedikit lebih lama dari 2000 md, yang akan merusak build Anda. Jika Anda memiliki ratusan pengujian, hal ini akan menjadi masalah besar.
Opsi 3: Menunggu sesuatu dengan cara yang benar!
Jika tidak ingin mengubah kode yang sedang diuji untuk mengekspos saat kode sedang sibuk, opsi lainnya adalah menunggu hingga kondisi tertentu terpenuhi, bukan menunggu dalam jumlah waktu yang arbitrer.
Di Compose, Anda dapat memanfaatkan fungsi waitUntil, yang menggunakan fungsi lain yang menghasilkan boolean.
Pembaruan 22/03/2023: mulai dari Compose 1.4.0, kami menambahkan kumpulan waitUntil API baru:
[Sebelum 1.4.0: Gunakan helper ini: waitUntilExists, waitUntilNodeCount]
…dan gunakan seperti ini:
Gunakan API ini hanya jika Anda perlu menyinkronkan pengujian dengan UI. Menyinkronkan setiap pernyataan pengujian akan mencemari kode pengujian secara tidak perlu, sehingga lebih sulit dipertahankan.
Lalu, kapan Anda harus menggunakannya? Kasus penggunaan yang baik untuk hal ini adalah memuat data dari yang dapat diamati (dengan LiveData, Kotlin Flow, atau RxJava). Jika UI Anda perlu menerima beberapa pembaruan sebelum Anda menganggapnya tidak ada aktivitas, sebaiknya sederhanakan sinkronisasi menggunakan waitUntil.
Misalnya, saat Anda mengumpulkan Flow dari tampilan:
Dan Anda mengirimkan beberapa item ke tampilan tersebut:
Jika repository memerlukan waktu yang tidak ditentukan untuk kembali dengan hasil pertama, framework pengujian akan menganggap “Loading” sebagai status tidak ada aktivitas (nilai awal yang ditetapkan di collectAsState) dan melanjutkan dengan pernyataan berikutnya.
Jadi, Anda dapat membuat pengujian jauh lebih andal jika memastikan UI tidak menampilkan indikator pemuatan:
Selamat… tunggu… menguji!
Lisensi cuplikan kode:
Copyright 2022 Google LLC. SPDX-License-Identifier: Apache-2.0
-
PanduanDalam postingan ini, kita akan membahas sesuatu yang lebih menarik secara visual — menerapkan efek sorotan di atas pratinjau kamera, menggunakan deteksi wajah sebagai dasar untuk efek tersebut.
Jolanda Verhoef • 8 menit untuk dibaca -
PanduanMeskipun performa aplikasi sering kali disamakan dengan UI yang lancar dan waktu mulai yang cepat, memori berfungsi sebagai fondasi senyap yang menjadi dasar pembuatan metrik yang terlihat ini. Bukan rahasia lagi bahwa kita melihat perubahan di mana memori perangkat menjadi lebih penting dari sebelumnya.
-
PanduanHari ini, kami dengan senang hati mengumumkan kredensial email terverifikasi baru yang dikeluarkan oleh Google, yang kini dapat diambil langsung oleh developer dari Credential Manager Digital Credential API Android.
Niharika Arora, Jean-Pierre Pralle • 3 menit untuk dibaca
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.