Jika Anda mengimplementasikan penyedia konten untuk menyimpan dan mengambil data atau membuat data dapat diakses oleh aplikasi lain, Anda harus menguji penyedia Anda untuk memastikan bahwa perilakunya tidak dengan cara yang tidak diharapkan. Tutorial ini menjelaskan cara menguji software publik penyedia konten, dan juga berlaku untuk penyedia yang Anda rahasiakan aplikasi Anda sendiri.
Membuat pengujian integrasi untuk penyedia konten
Penyedia konten memungkinkan Anda mengakses data pengguna aktual, jadi Anda harus memastikan Anda menguji penyedia konten di lingkungan pengujian yang terisolasi. Ini memungkinkan Anda untuk hanya menjalankan dependensi data yang diatur secara eksplisit dalam kasus pengujian tertentu. Hal ini juga berarti bahwa pengujian Anda tidak mengubah data pengguna yang sebenarnya. Sebagai Misalnya, Anda harus menghindari penulisan pengujian yang gagal karena ada data yang tersisa dibandingkan pengujian sebelumnya. Demikian pula, pengujian harus menghindari menambahkan atau menghapus informasi kontak yang sebenarnya dalam penyedia.
Untuk menguji penyedia konten Anda secara terpisah, gunakan ProviderTestCase2
. Class ini memungkinkan Anda menggunakan class objek tiruan Android seperti
IsolatedContext
dan MockContentResolver
untuk mengakses file dan
informasi {i>database<i} tanpa mempengaruhi
data aktual pengguna.
Pengujian integrasi Anda harus ditulis sebagai class pengujian JUnit 4. Untuk mempelajari lebih lanjut tentang membuat class pengujian JUnit 4 dan menggunakan pernyataan JUnit 4, lihat Membuat Class Pengujian Unit Lokal.
Agar dapat membuat pengujian integrasi untuk penyedia konten, Anda harus melakukan langkah:
- Buat class pengujian sebagai subclass
ProviderTestCase2
. - Menentukan class
AndroidJUnitRunner
yang disediakan oleh AndroidX Test sebagai runner pengujian default. - Tetapkan objek
Context
dari classApplicationProvider
. Lihat cuplikan di bawah ini sebagai contoh.
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 sebagai
serta metode khusus Android untuk menguji izin aplikasi. Paling sering
fitur penting dari class ini adalah inisialisasinya, yang membuat
lingkungan pengujian yang terisolasi.
Inisialisasi
Inisialisasi dilakukan di dalam konstruktor untuk ProviderTestCase2
,
yang dipanggil subclass dalam konstruktornya sendiri. ProviderTestCase2
konstruktor membuat objek IsolatedContext
yang mengizinkan file dan
operasi database tetapi menghentikan interaksi lain dengan sistem Android.
Operasi file dan {i>database<i} sendiri
terjadi di direktori yang
lokal ke 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 lingkungannya
informasi dari IsolatedContext
, sehingga dibatasi untuk bekerja di
lingkungan pengujian yang terisolasi. Semua pengujian yang dilakukan dalam class kasus pengujian berjalan
terhadap objek yang terisolasi ini.
Anda menjalankan pengujian integrasi untuk penyedia konten dengan cara yang sama seperti pengujian berinstrumen pengujian unit iklan.
Yang perlu diuji
Berikut adalah beberapa pedoman khusus untuk menguji penyedia konten.
- Pengujian dengan metode resolver: Meskipun Anda dapat membuat instance penyedia
objek
di
ProviderTestCase2
, Anda harus selalu menguji dengan objek resolver menggunakan URI yang sesuai. Dengan begitu, Anda dapat memastikan bahwa Anda menguji penyedia dengan melakukan interaksi yang sama yang akan digunakan aplikasi biasa. - Menguji penyedia publik sebagai kontrak: Jika Anda ingin penyedia tersebut
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, lihat untuk konstanta yang merujuk pada nama kolom dalam 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 mungkin menawarkan beberapa URI, masing-masing mengacu pada aspek data yang berbeda.
- Menguji URI yang tidak valid. Pengujian unit Anda harus secara sengaja
memanggil penyedia dengan
URI yang tidak valid, dan cari error. Desain penyedia yang baik
adalah untuk menampilkan
IllegalArgumentException
untuk URI yang tidak valid.
- Menguji interaksi penyedia standar: Sebagian besar penyedia menawarkan enam akses
metode:
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 Anda harus mengujinya. Logika bisnis mencakup penanganan nilai yang tidak valid, keuangan, atau perhitungan aritmatika, eliminasi, atau penggabungan duplikat.