Menguji layanan Anda

Jika Anda menjalankan Service lokal sebagai komponen aplikasi Anda, Anda harus menguji Service untuk memastikan bahwa aplikasi Anda tidak berperilaku dengan cara yang tidak terduga. Anda dapat membuat pengujian unit berinstrumen untuk memverifikasi bahwa perilaku di Service benar; misalnya, layanan menyimpan dan mengembalikan nilai data yang valid dan menjalankan operasi data dengan benar.

AndroidX Test menyediakan API untuk menguji objek Service Anda secara terpisah. Class ServiceTestRule adalah aturan JUnit 4 yang memulai layanan Anda sebelum metode pengujian unit Anda berjalan, dan menonaktifkan layanan setelah pengujian selesai. Dengan menggunakan aturan pengujian ini, Anda memastikan bahwa koneksi ke layanan selalu dibuat sebelum metode pengujian Anda berjalan. Untuk mempelajari lebih lanjut aturan JUnit 4, lihat dokumentasi JUnit.

Catatan: Class ServiceTestRule tidak mendukung pengujian objek IntentService. Jika Anda perlu menguji objek IntentService, Anda harus mengenkapsulasi logika di class terpisah dan membuat pengujian unit yang sesuai sebagai gantinya.

Menyiapkan lingkungan pengujian Anda

Sebelum mem-build pengujian integrasi Anda untuk layanan ini, pastikan untuk mengonfigurasi project Anda untuk pengujian berinstrumen, seperti yang dijelaskan dalam Menyiapkan project untuk AndroidX Test.

Membuat pengujian integrasi untuk layanan

Pengujian integrasi Anda harus ditulis sebagai class pengujian JUnit 4. Untuk mempelajari lebih lanjut cara membuat class pengujian JUnit 4 dan menggunakan metode pernyataan JUnit 4, lihat Membuat class pengujian unit berinstrumen.

Untuk membuat pengujian integrasi untuk layanan Anda, tambahkan anotasi @RunWith(AndroidJUnit4::class) di awal definisi class pengujian Anda. Anda juga harus menentukan class AndroidJUnitRunner yang disediakan AndroidX Test sebagai runner pengujian default Anda. Langkah ini dideskripsikan lebih detail dalam Menjalankan Pengujian Unit Berinstrumen.

Berikutnya, buat instance ServiceTestRule dalam pengujian Anda menggunakan anotasi @Rule.

Kotlin

    @get:Rule
    val serviceRule = ServiceTestRule()
    

Java

    @Rule
    public final ServiceTestRule serviceRule = new ServiceTestRule();
    

Contoh berikut menunjukkan kemungkinan cara Anda menjalankan pengujian integrasi untuk layanan. Metode pengujian testWithBoundService memverifikasi bahwa aplikasi berhasil mengikat ke layanan lokal dan antarmuka layanan berperilaku dengan benar.

Kotlin

    @Test
    @Throws(TimeoutException::class)
    fun testWithBoundService() {
        // Create the service Intent.
        val serviceIntent = Intent(
                ApplicationProvider.getApplicationContext<Context>(),
                LocalService::class.java
        ).apply {
            // Data can be passed to the service via the Intent.
            putExtra(SEED_KEY, 42L)
        }

        // Bind the service and grab a reference to the binder.
        val binder: IBinder = serviceRule.bindService(serviceIntent)

        // Get the reference to the service, or you can call
        // public methods on the binder directly.
        val service: LocalService = (binder as LocalService.LocalBinder).getService()

        // Verify that the service is working correctly.
        assertThat(service.getRandomInt(), `is`(any(Int::class.java)))
    }
    

Java

    @Test
    public void testWithBoundService() throws TimeoutException {
        // Create the service Intent.
        Intent serviceIntent =
                new Intent(ApplicationProvider.getApplicationContext(),
                    LocalService.class);

        // Data can be passed to the service via the Intent.
        serviceIntent.putExtra(LocalService.SEED_KEY, 42L);

        // Bind the service and grab a reference to the binder.
        IBinder binder = serviceRule.bindService(serviceIntent);

        // Get the reference to the service, or you can call
        // public methods on the binder directly.
        LocalService service =
                ((LocalService.LocalBinder) binder).getService();

        // Verify that the service is working correctly.
        assertThat(service.getRandomInt()).isAssignableTo(Integer.class);
    }
    

Menjalankan pengujian integrasi untuk layanan

Anda dapat menjalankan pengujian integrasi dari Android Studio atau dari command line. Pastikan untuk menentukan AndroidJUnitRunner sebagai runner instrumentasi default dalam project Anda.

Untuk menjalankan pengujian integrasi untuk layanan Anda, ikuti langkah-langkah untuk menjalankan pengujian berinstrumen yang dijelaskan dalam Memulai pengujian.

Anda sebaiknya juga membaca Layanan.

Referensi lainnya

Untuk mempelajari topik ini lebih lanjut, lihat referensi tambahan berikut.

Contoh