Jika Anda menerapkan penyedia konten untuk menyimpan dan mengambil data atau membuat data dapat diakses oleh aplikasi lain, Anda harus menguji penyedia tersebut untuk memastikan bahwa penyedia tersebut tidak berperilaku dengan cara yang tidak terduga. Tutorial ini menjelaskan cara menguji penyedia konten publik, dan juga berlaku untuk penyedia yang Anda jaga privasinya untuk aplikasi Anda sendiri.
Membuat pengujian integrasi untuk penyedia konten
Penyedia konten memungkinkan Anda mengakses data pengguna sebenarnya. Jadi, penting untuk memastikan bahwa Anda menguji penyedia konten di lingkungan pengujian yang terisolasi. Pendekatan ini memungkinkan Anda untuk hanya berjalan pada dependensi data yang ditetapkan secara eksplisit dalam kasus pengujian. Hal ini juga berarti bahwa pengujian Anda tidak memodifikasi data pengguna yang sebenarnya. Misalnya, Anda harus menghindari penulisan pengujian yang gagal karena ada data yang tersisa dari pengujian sebelumnya. Demikian pula, pengujian Anda harus menghindari penambahan atau penghapusan informasi kontak sebenarnya di penyedia.
Untuk menguji penyedia konten Anda secara terpisah, gunakan class
ProviderTestCase2
. Class ini memungkinkan Anda menggunakan class objek tiruan Android seperti
IsolatedContext
dan MockContentResolver
untuk mengakses informasi file dan
database tanpa memengaruhi data pengguna yang sebenarnya.
Pengujian integrasi Anda harus ditulis sebagai class pengujian JUnit 4. Untuk mempelajari lebih lanjut cara membuat class pengujian JUnit 4 dan menggunakan pernyataan JUnit 4, lihat Membuat Class Pengujian Unit Lokal.
Untuk membuat pengujian integrasi bagi penyedia konten, Anda harus melakukan langkah-langkah berikut:
- Buat class pengujian sebagai subclass
ProviderTestCase2
. - Tentukan class
AndroidJUnitRunner
yang disediakan AndroidX Test sebagai runner pengujian default Anda. - Setel objek
Context
dari classApplicationProvider
. Lihat cuplikan di bawah untuk mengetahui contohnya.
Kotlin
@Throws(Exception::class) override fun setUp() { super.setUp() context = ApplicationProvider.getApplicationContext<Context>() }
Java
@Override protected void setUp() throws Exception { super.setUp(); setContext(ApplicationProvider.getApplicationContext()); }
Cara kerja ProviderTestCase2
Anda menguji penyedia dengan subclass ProviderTestCase2
. Class dasar ini
memperluas AndroidTestCase
, sehingga menyediakan framework pengujian JUnit serta
metode khusus Android untuk menguji izin aplikasi. Fitur paling
penting dari class ini adalah inisialisasi, yang menciptakan
lingkungan pengujian yang terisolasi.
Inisialisasi
Inisialisasi dilakukan di dalam konstruktor untuk ProviderTestCase2
,
yang memanggil subclass dalam konstruktornya sendiri. Konstruktor ProviderTestCase2
membuat objek IsolatedContext
yang memungkinkan operasi file dan database, tetapi menghentikan interaksi lain dengan sistem Android.
Operasi file dan database sendiri berlangsung di direktori yang
bersifat lokal untuk perangkat atau emulator dan memiliki awalan khusus.
Konstruktor lalu membuat MockContentResolver
untuk digunakan sebagai resolver
untuk pengujian.
Terakhir, konstruktor membuat instance penyedia yang sedang diuji. Ini adalah objek ContentProvider
normal, tetapi mengambil semua informasi lingkungannya dari IsolatedContext
, sehingga dibatasi untuk bekerja di lingkungan pengujian yang terisolasi. Semua pengujian yang dilakukan dalam class kasus pengujian dijalankan
pada objek yang terisolasi ini.
Anda menjalankan pengujian integrasi untuk penyedia konten dengan cara yang sama seperti pengujian unit berinstrumen.
Yang perlu diuji
Berikut adalah beberapa pedoman khusus untuk menguji penyedia konten.
- Pengujian dengan metode resolver: Meskipun Anda dapat membuat instance objek
penyedia
di
ProviderTestCase2
, Anda harus selalu menguji dengan objek resolver menggunakan URI yang sesuai. Tindakan tersebut memastikan bahwa Anda menguji penyedia dengan melakukan interaksi yang sama seperti yang akan digunakan aplikasi biasa. - Menguji penyedia publik sebagai kontrak: Jika Anda ingin penyedia Anda menjadi
publik dan tersedia untuk aplikasi lain, Anda harus mengujinya sebagai kontrak.
Beberapa contoh cara melakukannya adalah sebagai berikut:
- Uji dengan konstanta yang ditampilkan oleh penyedia Anda secara publik. Misalnya, cari konstanta yang merujuk pada nama kolom di salah satu tabel data penyedia. Tabel data ini harus selalu merupakan konstanta yang didefinisikan secara publik oleh penyedia.
- Uji semua URI yang ditawarkan penyedia Anda. Penyedia Anda dapat menawarkan beberapa URI, masing-masing mengacu pada aspek data yang berbeda.
- Menguji URI yang tidak valid. Pengujian unit Anda harus sengaja memanggil penyedia dengan
URI yang tidak valid, dan mencari error. Desain penyedia yang baik adalah menampilkan
IllegalArgumentException
untuk URI yang tidak valid.
- Menguji interaksi penyedia standar: Sebagian besar penyedia menawarkan enam metode
akses:
query()
,insert()
,delete()
,update()
,getType()
, danonCreate()
. Pengujian Anda harus memverifikasi bahwa semua metode ini berfungsi. - Menguji logika bisnis: Jika penyedia konten menerapkan logika bisnis, Anda harus mengujinya. Logika bisnis mencakup penanganan nilai yang tidak valid, penghitungan keuangan atau aritmetika, penghapusan, atau penggabungan duplikat.