2012-06-09 4 views
45

У меня есть небольшое приложение, которое взаимодействует с удаленным сервисом android. Я хотел бы издеваться над этим сервисом в модульных тестах. Я использую Robolectric и JUnit для других тестовых примеров и теней, но я не мог понять, как обращаться с удаленными службами.Как протестировать удаленный сервис поддержки android

Достаточно ли создать и запустить тестовую службу с использованием того же пакета с реальными методами обслуживания и экспорта с использованием того же aidl?

Поскольку у меня нет кода для этой услуги, я полагаю, что я не могу использовать RobolectricShadowService, для которого требуется наличие фактического класса.

Большое спасибо.

+0

Я думаю, что ваши ссылки не работают. – PunDefeated

+0

Вы тестируете удаленную службу или небольшое приложение, которое взаимодействует с удаленным сервисом Android? Если вы тестируете приложение, я бы начал с кодирования интерфейса. Все вызовы удаленной службы должны выполняться с помощью интерфейса. В вашем маленьком приложении будет реализован интерфейс, который фактически вызывает удаленный сервис. Ваш тестовый пакет будет иметь вторую реализацию, которая издевается над информацией, полученной от удаленной службы. Каждый тест может настраивать некоторую поддержку в данных памяти, которая используется при реализации тестовых пакетов. –

+0

Я не сделал что-то подобное в android, но имею весну в других приложениях Java, поэтому я не уверен в точном решении. –

ответ

1

Я бы использовал Mockito, чтобы создать Mock интерфейса, а затем передать этот экземпляр вашему коду в ваших тестах. Вы также можете вручную создать реализацию этого интерфейса в тестовом коде и использовать его.

Таким образом, вы должны делать издевательство над собой, и важно, чтобы код, который вы хотите тестировать, использовал некоторую форму инъекции зависимости, чтобы получить ссылку на интерфейс helpl, чтобы вы могли передать свой собственный макет в своих тестах.

0

Если вы хотите написать единичный тест для обслуживания, вы можете использовать Mockito для издевательского поведения службы. Если вы хотите протестировать свою службу на реальном устройстве, тогда вы сможете подключиться к вашему сервису.

@RunWith(AndroidJUnit4.class) 
public classRemoteProductServiceTest { 
    @Rule 
    public final ServiceTestRule mServiceRule = new ServiceTestRule(); 
    @Test 
    public void testWithStartedService() throws TimeoutException { 
     mServiceRule.startService(
       new Intent(InstrumentationRegistry.getTargetContext(), ProductService.class)); 
     //do something 
    } 
    @Test 
    public void testWithBoundService() throws TimeoutException, RemoteException { 
     IBinder binder = mServiceRule.bindService(
       new Intent(InstrumentationRegistry.getTargetContext(), ProductService.class)); 
     IRemoteProductService iRemoteProductService = IRemoteProductService.Stub.asInterface(binder); 
     assertNotNull(iRemoteProductService); 
     iRemoteProductService.addProduct("tanvi", 12, 12.2f); 
    assertEquals(iRemoteProductService.getProduct("tanvi").getQuantity(), 12); 
    } 
}