Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

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 Anda untuk memastikan bahwa penyedia tidak berperilaku dengan cara yang tidak terduga. Tutorial ini menjelaskan cara menguji penyedia konten publik, dan juga berlaku untuk penyedia yang Anda buat pribadi untuk aplikasi Anda sendiri.

Anda juga harus membaca Penyedia Konten.

Membuat pengujian integrasi untuk penyedia konten

Di Android, aplikasi menampilkan penyedia konten sebagai data API yang menyediakan tabel data, dengan internalnya yang tersembunyi dari tampilan. Penyedia konten mungkin memiliki banyak konstanta publik, tetapi biasanya penyedia konten memiliki sedikit konstanta publik jika ada metode publik dan tidak ada variabel publik. Karena itu, Anda harus menulis pengujian Anda hanya berdasarkan anggota publik penyedia. Penyedia konten yang didesain seperti ini menawarkan kontrak antara penyedia konten dan penggunanya.

Penyedia konten memungkinkan Anda mengakses data aktual pengguna, jadi penting untuk memastikan bahwa Anda menguji penyedia konten dalam lingkungan pengujian yang terpisah. Pendekatan ini memungkinkan Anda untuk hanya menjalankan pengujian terhadap dependensi data yang ditetapkan secara eksplisit dalam kasus pengujian. Hal tersebut juga berarti bahwa pengujian Anda tidak mengubah data aktual pengguna. 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 aktual dalam penyedia.

Untuk menguji penyedia konten Anda secara terpisah, gunakan class ProviderTestCase2. Class ini memungkinkan Anda untuk menggunakan class objek tiruan Android seperti IsolatedContext dan MockContentResolver untuk mengakses informasi file dan database tanpa memengaruhi data aktual pengguna.

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.
  • Tambahkan anotasi @RunWith(AndroidJUnit4::class) di awal definisi class pengujian Anda.
  • Tentukan class AndroidJUnitRunner yang disediakan AndroidX Test sebagai runner pengujian default Anda. Langkah ini dijelaskan lebih detail di Memulai dengan Pengujian.
  • Tetapkan objek Context dari class ApplicationProvider. Lihat cuplikan di bawah untuk melihat 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 serta metode khusus Android untuk menguji izin aplikasi. Fitur paling penting dari class ini adalah inisialisasi, yang menciptakan lingkungan pengujian yang terpisah.

Inisialisasi dilakukan di dalam konstruktor untuk ProviderTestCase2, yang memanggil subclass dalam konstruktornya sendiri. Konstruktor ProviderTestCase2 membuat objek IsolatedContext yang mengizinkan 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 serta memiliki awalan khusus.

Konstruktor lalu membuat MockContentResolver agar digunakan sebagai resolver untuk pengujian.

Terakhir, konstruktor membuat instance penyedia yang sedang diuji. Instance ini merupakan objek ContentProvider yang normal, tetapi mengambil semua informasi lingkungannya dari IsolatedContext, sehingga dibatasi untuk bekerja di lingkungan pengujian yang terpisah. Semua pengujian yang dilakukan di class pengujian kasus dijalankan terhadap objek yang terpisah ini.

Anda menjalankan pengujian integrasi untuk penyedia konten dengan cara yang sama seperti pengujian unit berinstrumen. Guna menjalankan pengujian integrasi untuk penyedia konten Anda, ikuti langkah-langkah yang dijelaskan dalam Menjalankan Pengujian Unit Berinstrumen.

Apa saja 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. Dengan begitu, Anda dapat memastikan bahwa Anda menguji penyedia dengan melakukan interaksi yang sama yang akan digunakan aplikasi biasa.
  • Pengujian penyedia publik sebagai kontrak: Jika Anda bermaksud membuat 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.
    • Uji URI yang tidak valid: Pengujian unit Anda harus secara sengaja memanggil penyedia dengan URI yang tidak valid, dan mencari error. Desain penyedia yang baik adalah menampilkan IllegalArgumentException untuk URI yang tidak valid.
  • Uji 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. Metode-metode ini dijelaskan secara lebih detail dalam topik Penyedia Konten.
  • Uji logika bisnis: Jika penyedia konten menerapkan logika bisnis, Anda harus mengujinya. Logika bisnis mencakup penanganan nilai yang tidak valid, perhitungan keuangan atau aritmatika, dan penghapusan atau penggabungan duplikat.