Prueba de unidad Actividad.startService () llamada?

Intentando escribir mi primera aplicación Android-by-TDD (he escrito algunas pequeñas aplicaciones de Android sin TDD, estoy familiarizado con el entorno), pero parece que no puedo dar la vuelta a cómo escribir mi primera prueba.

El escenario:

Tengo una actividad, TasksActivity, y un servicio, TasksService. Tengo que probar que TasksActivity inicia TasksService en su método onStart ().

La prueba que he escrito es la siguiente:

public class ServiceControlTest extends ActivityUnitTestCase<TasksActivity>{ public ServiceControlTest() { super(TasksActivity.class); } public void testStartServiceOnInit () { final AtomicBoolean serviceStarted = new AtomicBoolean(false); setActivityContext(new MockContext() { @Override public ComponentName startService(Intent service) { Log.v("mockcontext", "Start service: " + service.toUri(0)); if (service.getComponent().getClassName().equals (TasksService.class.getName())) serviceStarted.set(true); return service.getComponent(); } }); startActivity(new Intent(), null, null); assertTrue ("Service should have been started", serviceStarted.get()); } } 

En mi método onCreate () en TasksActivity tengo:

  startService(new Intent(this, TasksService.class)); 

También he intentado

  getBaseContext().startService(new Intent(this, TasksService.class)); 

Pero en ninguno de los dos casos se llama al método startService de MockContext. ¿Hay alguna manera de configurar la interceptación de este método? Preferiría no tener que empezar a envolver las API básicas de Android para realizar pruebas básicas …

One Solution collect form web for “Prueba de unidad Actividad.startService () llamada?”

Sólo para resumir la conversación con Brian Dupuis en los comentarios, el problema era que MockContext no proporciona las instalaciones que son requeridas por la instrumentación de prueba para poder llamar correctamente a onCreate() . Cambiar de MockContext a ContextWrapper resuelto este problema.

La prueba de trabajo se ve así:

 public void testStartServiceOnInit () { final AtomicBoolean serviceStarted = new AtomicBoolean(false); setActivityContext(new ContextWrapper(getInstrumentation().getTargetContext()) { @Override public ComponentName startService(Intent service) { Log.v("mockcontext", "Start service: " + service.toUri(0)); if (service.getComponent().getClassName().equals ("net.meridiandigital.tasks.TasksService")) serviceStarted.set(true); return service.getComponent(); } }); startActivity(new Intent(), null, null); assertTrue ("Service should have been started", serviceStarted.get()); } 
  • Cómo probar esta línea de LayoutInflater.from () en android
  • ¿Cómo compartir recursos entre la prueba de unidad y la prueba de instrumentación en android?
  • ¿Cómo acceder a los recursos por ID en la prueba de unidad de Android?
  • Unidad de pruebas de las clases de Android realista. Entorno de prueba, ciclo de vida y respuestas
  • Prueba de componente en Android App SDLC?
  • ¿Es posible entrar en el modo de depuración para android cuando se ejecuta junit test?
  • ¿Utilizando Inyección de Dependencia con Roboguice?
  • ¿Es una prueba UNIT o una prueba de integración?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.