Если вы реализуете локальный Service как компонент приложения, то можете создать инструментальные тесты, чтобы проверить, правильно ли он работает.
AndroidX Test предоставляет API для тестирования объектов Service по отдельности. Класс ServiceTestRule – это правило JUnit 4, которое запускает сервис перед выполнением методов модульного тестирования и завершает его работу после завершения тестов. Подробнее о правилах JUnit 4 рассказывается в документации JUnit.
Как настроить тестовую среду
Прежде чем создавать интеграционный тест для сервиса, настройте проект для инструментальных тестов, как описано в разделе Настройка проекта для AndroidX Test.
Создайте интеграционный тест для сервисов
Интеграционный тест должен быть написан как тестовый класс JUnit 4. Подробнее о том, как создавать тестовые классы JUnit 4 и использовать методы утверждения JUnit 4, рассказывается в статье Как создать класс инструментального теста.
Создайте экземпляр ServiceTestRule в тесте, используя аннотацию @Rule.
Kotlin
@get:Rule val serviceRule = ServiceTestRule()
Java
@Rule public final ServiceTestRule serviceRule = new ServiceTestRule();
В примере ниже показано, как реализовать интеграционный тест для сервиса. Метод тестирования testWithBoundService() проверяет, что приложение успешно связывается с локальным сервисом и что интерфейс сервиса работает правильно.
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); }
Дополнительные ресурсы
Дополнительную информацию по этой теме можно найти по ссылкам ниже.