Menguji penyedia konten

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:

  1. Buat class pengujian sebagai subclass ProviderTestCase2.
  2. Tentukan class AndroidJUnitRunner yang disediakan AndroidX Test sebagai runner pengujian default Anda.
  3. Setel objek Context dari class ApplicationProvider. 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(), dan onCreate(). 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.