Menguji layanan

Jika Anda menerapkan Service lokal sebagai komponen aplikasi, Anda dapat membuat uji instrumentasi untuk memverifikasi bahwa perilakunya benar.

AndroidX Test menyediakan API untuk menguji objek Service Anda di isolasi. Class ServiceTestRule adalah aturan JUnit 4 yang memulai sebelum metode pengujian unit Anda berjalan, dan mematikan layanan setelah pengujian selesai. Untuk mempelajari aturan JUnit 4 lebih lanjut, lihat JUnit dokumentasi tambahan.

Menyiapkan lingkungan pengujian Anda

Sebelum membuat pengujian integrasi untuk layanan, pastikan untuk mengonfigurasi project Anda untuk uji instrumentasi, 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 tentang membuat class pengujian JUnit 4 dan menggunakan metode pernyataan JUnit 4, lihat Buat class pengujian berinstrumen.

Buat instance ServiceTestRule dalam pengujian Anda menggunakan @Rule anotasi.

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