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