Menguji penyedia konten

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:

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