Невозможно проверить привязку внешнего сервиса Android в InstrumentedTest - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь проверить внешнюю привязку к Сервису, который я определил. После класса, который я использую для инструментального теста:

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

@Test
public void testWithBoundService() throws TimeoutException, RemoteException {
    IMyInterface iMyInterface;
    Intent serviceIntent =
            new Intent(ApplicationProvider.getApplicationContext(),
                    MyService.class);
    IBinder binder = serviceRule.bindService(serviceIntent);
    assertNotNull(binder);
    iMyInterface = IMyInterface.Stub.asInterface(binder);
    assertTrue(iMyInterface.retrieveValue(new Attribute()).getValues().get(0).equals("home"));
}

@Test
public void testWithBoundServiceExternal() throws TimeoutException, RemoteException {
    IMyInterface iMyInterface;
    Intent serviceIntent = new Intent();
    serviceIntent.setClassName("a.b.c.d", "a.b.c.d.MyService");
    IBinder binder = serviceRule.bindService(serviceIntent);
    assertNotNull(binder);
    iMyInterface = IMyInterface.Stub.asInterface(binder);
    boolean reachedHere = false;

    assertTrue(iMyInterface.retrieveValue(new Attribute()).getValues().get(0).equals("home"));

}

Первая тестовая функция выполняется без ошибок, вторая не работает со следующим сообщением:

Не удалось привязать к сервису! Объявлен ли ваш сервис в манифесте?

Служба определена в пакете a.b.c.d, аналогичном интерфейсу Aidl, а InstrumentedTest работает в пакете a.b.c.e

1 Ответ

0 голосов
/ 04 июля 2019

Через несколько минут я понял, что у Манифеста был другой пакет, и для вызова Сервиса вы должны использовать пакет Манифеста. Итак, предположим, что в теге атрибут package = "a.b.c.f", для вызова внешнего сервиса вы должны использовать:

serviceIntent.setClassName("a.b.c.f", "a.b.c.d.MyService") 
...