Kiểm thử dịch vụ

Nếu đang triển khai Service cục bộ làm một thành phần của ứng dụng, bạn có thể tạo kiểm thử đo lường để xác minh hành vi của mã là chính xác.

Kiểm thử AndroidX cung cấp một API để kiểm thử các đối tượng Service trong tách biệt. Lớp ServiceTestRule là quy tắc JUnit 4 sẽ bắt đầu trước khi các phương thức kiểm thử đơn vị chạy và tắt dịch vụ sau thử nghiệm hoàn tất. Để tìm hiểu thêm về quy tắc JUnit 4, hãy xem JUnit .

Thiết lập môi trường thử nghiệm

Trước khi xây dựng thử nghiệm tích hợp cho dịch vụ, hãy nhớ định cấu hình dự án của bạn cho các kiểm thử đo lường, như được mô tả trong Thiết lập dự án cho Kiểm thử AndroidX.

Tạo chương trình kiểm thử tích hợp cho các dịch vụ

Bài kiểm thử tích hợp của bạn nên được viết dưới dạng lớp kiểm thử JUnit 4. Để tìm hiểu thêm về cách tạo lớp kiểm thử JUnit 4 và sử dụng phương thức xác nhận JUnit 4, hãy xem Tạo lớp kiểm thử đo lường.

Tạo một thực thể ServiceTestRule trong kiểm thử của bạn bằng cách sử dụng @Rule của bạn.

Kotlin


@get:Rule
val serviceRule = ServiceTestRule()

Java


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

Ví dụ sau đây trình bày cách bạn có thể triển khai kiểm thử tích hợp cho một . Phương thức kiểm thử testWithBoundService() xác minh rằng ứng dụng liên kết thành công với dịch vụ cục bộ và giao diện dịch vụ hoạt động chính xác.

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);
}

Tài nguyên khác

Để tìm hiểu thêm về chủ đề này, hãy tham khảo thêm các tài nguyên sau đây.

Mẫu