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

Если вы реализуете локальную 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);
}

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

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

Образцы