Если вы реализуете локальную 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);
}
Дополнительные ресурсы
Чтобы узнать больше по этой теме, обратитесь к следующим дополнительным ресурсам.