Проверьте свой сервис

Если вы реализуете локальную Service как компонент своего приложения, вы можете создать инструментальные тесты , чтобы проверить правильность ее поведения.

AndroidX Test предоставляет API для изолированного тестирования объектов Service . Класс ServiceTestRule — это правило JUnit 4, которое запускает службу до запуска методов модульного тестирования и завершает работу службы после завершения тестов. Дополнительные сведения о правилах JUnit 4 см. в документации JUnit .

Настройте среду тестирования

Прежде чем создавать интеграционный тест для службы, обязательно настройте свой проект для инструментальных тестов, как описано в разделе Настройка проекта для AndroidX Test .

Создайте интеграционный тест для сервисов

Ваш интеграционный тест должен быть написан как тестовый класс JUnit 4. Дополнительные сведения о создании тестовых классов JUnit 4 и использовании методов утверждения JUnit 4 см. в разделе Создание инструментированного тестового класса .

Создайте экземпляр ServiceTestRule в своем тесте, используя аннотацию @Rule .

Котлин


@get:Rule
val serviceRule = ServiceTestRule()

Ява


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

В следующем примере показано, как можно реализовать интеграционный тест для службы. Тестовый метод testWithBoundService() проверяет, что приложение успешно привязывается к локальной службе и что интерфейс службы работает правильно.

Котлин


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

Ява


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

Дополнительные ресурсы

Чтобы узнать больше по этой теме, обратитесь к следующим дополнительным ресурсам.

Образцы