Halaman ini menguraikan prinsip-prinsip inti pengujian aplikasi Android, termasuk praktik terbaik utama dan manfaatnya.
Manfaat pengujian
Pengujian adalah bagian integral dari proses pengembangan aplikasi. Dengan menjalankan pengujian terhadap aplikasi secara konsisten, Anda dapat memverifikasi ketepatan, perilaku fungsional, dan kegunaan aplikasi sebelum merilisnya ke publik.
Anda dapat menguji aplikasi secara manual dengan menjelajahinya. Anda dapat menggunakan perangkat dan emulator yang berbeda, mengubah bahasa sistem, dan mencoba membuat setiap error pengguna atau menjelajahi setiap alur pengguna.
Namun, penskalaan pengujian manual kurang baik, dan regresi dalam perilaku aplikasi Anda dapat dengan mudah terlewatkan. Pengujian otomatis melibatkan penggunaan alat yang melakukan pengujian untuk Anda, yang lebih cepat, lebih dapat diulang, dan umumnya memberikan masukan yang lebih dapat ditindaklanjuti tentang aplikasi Anda lebih awal dalam proses pengembangan.
Jenis pengujian di Android
Aplikasi seluler bersifat kompleks dan harus berfungsi dengan baik di banyak lingkungan. Oleh karena itu, ada banyak jenis pengujian.
Subjek
Misalnya, ada berbagai jenis pengujian, bergantung pada subjek:
- Pengujian fungsional: apakah aplikasi saya melakukan apa yang seharusnya?
- Pengujian performa: apakah dilakukan dengan cepat dan efisien?
- Pengujian aksesibilitas: apakah berfungsi dengan baik dengan layanan aksesibilitas?
- Pengujian kompatibilitas: apakah berfungsi dengan baik di setiap perangkat dan level API?
Cakupan
Pengujian juga bervariasi, bergantung pada ukuran, atau tingkat isolasi:
- Pengujian unit atau pengujian kecil hanya memverifikasi sebagian kecil aplikasi, seperti metode atau class.
- Pengujian end-to-end atau pengujian besar memverifikasi bagian aplikasi yang lebih besar pada saat yang sama, seperti seluruh layar atau alur pengguna.
- Pengujian sedang berada di antara dan memeriksa integrasi antara dua atau lebih unit.

Ada banyak cara untuk mengklasifikasikan pengujian. Namun, perbedaan yang paling penting bagi developer aplikasi adalah tempat pengujian dijalankan.
Pengujian berinstrumen versus pengujian lokal
Anda dapat menjalankan pengujian di perangkat Android atau di komputer lain:
- Pengujian berinstrumen berjalan di perangkat Android, baik fisik maupun yang diemulasi. Aplikasi dibangun dan diinstal bersama aplikasi pengujian yang menyuntikkan perintah dan membaca status. Pengujian berinstrumen biasanya merupakan pengujian UI, yang meluncurkan aplikasi dan kemudian berinteraksi dengannya.
- Pengujian lokal dieksekusi di mesin pengembangan atau server Anda, sehingga juga disebut pengujian sisi host. Pengujian ini biasanya kecil dan cepat, mengisolasi subjek yang diuji dari aplikasi lainnya.

Tidak semua pengujian unit bersifat lokal, dan tidak semua pengujian menyeluruh dijalankan di perangkat. Contoh:
- Pengujian lokal besar: Anda dapat menggunakan simulator Android yang berjalan secara lokal, seperti Robolectric.
- Pengujian instrumentasi kecil: Anda dapat memverifikasi bahwa kode Anda berfungsi dengan baik dengan fitur framework, seperti database SQLite. Anda dapat menjalankan pengujian ini di beberapa perangkat untuk memeriksa integrasi dengan beberapa versi SQLite.
Contoh
Cuplikan berikut menunjukkan cara berinteraksi dengan UI dalam pengujian UI berinstrumen yang mengklik suatu elemen dan memverifikasi bahwa elemen lain ditampilkan.
Espresso
// When the Continue button is clicked
onView(withText("Continue"))
.perform(click())
// Then the Welcome screen is displayed
onView(withText("Welcome"))
.check(matches(isDisplayed()))
Compose UI
// When the Continue button is clicked
composeTestRule.onNodeWithText("Continue").performClick()
// Then the Welcome screen is displayed
composeTestRule.onNodeWithText("Welcome").assertIsDisplayed()
Cuplikan ini menunjukkan bagian dari pengujian unit untuk ViewModel (pengujian lokal sisi host):
// Given an instance of MyViewModel
val viewModel = MyViewModel(myFakeDataRepository)
// When data is loaded
viewModel.loadData()
// Then it should be exposing data
assertTrue(viewModel.data != null)
Arsitektur yang dapat diuji
Dengan arsitektur aplikasi yang dapat diuji, kode mengikuti struktur yang memungkinkan Anda menguji berbagai bagiannya secara terpisah dengan mudah. Arsitektur yang dapat diuji memiliki keunggulan lain, seperti keterbacaan, kemudahan pemeliharaan, skalabilitas, dan kemampuan penggunaan ulang yang lebih baik.
Arsitektur yang tidak dapat diuji menghasilkan hal berikut:
- Pengujian yang lebih besar, lebih lambat, dan lebih tidak stabil. Class yang tidak dapat diuji unit mungkin harus dicakup oleh pengujian integrasi atau pengujian UI yang lebih besar.
- Lebih sedikit peluang untuk menguji berbagai skenario. Pengujian yang lebih besar lebih lambat, sehingga menguji semua kemungkinan status aplikasi mungkin tidak realistis.
Untuk mempelajari lebih lanjut panduan arsitektur, lihat panduan arsitektur aplikasi.
Pendekatan untuk memisahkan
Jika Anda dapat mengekstrak sebagian fungsi, class, atau modul dari bagian lainnya, pengujiannya akan lebih mudah dan efektif. Praktik ini dikenal sebagai pemisahan, dan merupakan konsep yang paling penting untuk arsitektur yang dapat diuji.
Teknik pelepasan umum meliputi:
- Membagi aplikasi menjadi beberapa lapisan seperti Presentation, Domain, dan Data. Anda juga dapat membagi aplikasi menjadi modul, satu per fitur.
- Hindari menambahkan logika ke entitas yang memiliki dependensi besar, seperti aktivitas dan fragmen. Gunakan class ini sebagai titik entri ke framework dan pindahkan UI dan logika bisnis ke tempat lain, seperti ke Composable, ViewModel, atau lapisan domain.
- Hindari dependensi framework langsung dalam class yang berisi logika bisnis. Misalnya, jangan gunakan Konteks Android di ViewModel.
- Memudahkan penggantian dependensi. Misalnya, gunakan antarmuka, bukan implementasi konkret. Gunakan Injeksi dependensi meskipun Anda tidak menggunakan framework DI.
Langkah berikutnya
Setelah mengetahui alasan Anda harus melakukan pengujian dan dua jenis pengujian utama, Anda dapat membaca Yang harus diuji atau mempelajari Strategi pengujian
Atau, jika Anda ingin membuat pengujian pertama dan belajar sambil melakukan, lihat codelab Pengujian.