2012-06-09 12 views
45

Tengo una pequeña aplicación que interactúa con un servicio remoto android. Me gustaría burlar ese servicio en pruebas unitarias. Uso Robolectric y JUnit para otros casos de prueba y sombras, pero no pude entender cómo tratar con los servicios remotos.Cómo probar el servicio de asistencia remota de Android

¿Es suficiente crear e iniciar un servicio de prueba utilizando el mismo paquete con el servicio real y los métodos de exportación utilizando el mismo aidl?

Como no tengo el código para ese servicio, supongo que no puedo usar el ShadowService que requiere que la clase real esté allí.

Muchas gracias.

+0

Creo que sus enlaces están rotos. – PunDefeated

+0

¿Está probando el servicio remoto o la pequeña aplicación que está interactuando con el servicio remoto de Android? Si está probando la aplicación, comenzaría por codificarla en una interfaz. Todas las llamadas al servicio remoto se deben hacer con la interfaz. Su pequeña aplicación tendría una implementación de la interfaz que realmente llama al servicio remoto. Su paquete de prueba tendrá una segunda implementación que se burla de la información devuelta por el servicio remoto. Cada prueba podría configurar algún respaldo en los datos de memoria que utiliza la implementación de paquetes de prueba. –

+0

No he hecho algo como esto en Android, pero tengo primavera en otras aplicaciones de Java, así que no estoy seguro de una solución exacta. –

Respuesta

1

Usaría Mockito para crear un simulacro de la interfaz y luego pasar esa instancia a su código en las pruebas. También puede crear manualmente una implementación de esa interfaz en su código de prueba y usar eso.

Así que tiene que hacer el burlarse usted mismo y es importante que el código que desea probar use algún tipo de inyección de dependencia para obtener una referencia a la interfaz de ayuda, para que pueda pasar su propio simulacro en sus pruebas.

0

Si desea escribir una prueba unitaria para el servicio, puede usar Mockito para el comportamiento del servicio burlón. Si desea probar su servicio en el dispositivo real, entonces así es como puede conectarse con su servicio.

@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); 
    } 
} 
Cuestiones relacionadas