Menguji layanan

Jika menerapkan Service lokal sebagai komponen aplikasi, Anda dapat membuat pengujian berinstrumen untuk memverifikasi bahwa perilakunya sudah 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 berjalan, dan menonaktifkan layanan setelah pengujian selesai. Untuk mempelajari aturan JUnit 4 lebih lanjut, lihat dokumentasi JUnit.

Menyiapkan lingkungan pengujian Anda

Sebelum membuat pengujian integrasi untuk layanan ini, pastikan untuk mengonfigurasi project Anda untuk pengujian berinstrumen, seperti yang dijelaskan dalam Menyiapkan project untuk Pengujian AndroidX.

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 berinstrumen.

Buat instance ServiceTestRule dalam pengujian menggunakan anotasi @Rule.

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


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

Contoh berikut menunjukkan cara menerapkan pengujian integrasi untuk layanan. Metode pengujian testWithBoundService() memverifikasi bahwa aplikasi berhasil mengikat ke layanan lokal dan bahwa 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);
}

Referensi lainnya

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

Contoh