NPE cuando getSystemService se llama en una instancia de servicio por Robolectric

Cuando traté de llamar a getSystemService en una instancia de Service, lanzó un NPE. Se llama en onCreate:

Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); 

Y creé la instancia del servicio como esto:

 @Test public void test() throws Exception{ FooService service = new FooService(); service.oncreate();//NPE in this line //... intent declaration service.onStartCommand(intent, 0, 1); } 

Pero cuando traté de modificar mi código original de getSystemService, que fue llamado por la instancia Service itslef, a xxApplication.getSystemService (XXX), que fue llamado por la aplicación, no lanzó ninguna excepción. Entonces, ¿cómo puedo probar un servicio correctamente sin modificar mi código original?

 @Test public void test() throws Exception { ServiceController<FooService> serviceController = Robolectric.buildService(FooService.class); // ... intent declaration. serviceController.attach() // Calls service.attach() .create() // Calls service.onCreate() .withIntent(intent) .startCommand(0, 1); // Calls service.onStartCommand(intent, 0, 1) } 

El punto clave es llamar attach() antes de onCreate() . Cualquier persona no sabe cómo crear una instancia de Service correctamente puede ver este problema .

  • Robolectric - cómo desactivar una prueba de unidad?
  • Robolectric (android): Pruebas de eventos?
  • Prueba de DialogFragments con Robolectric
  • Cómo configurar Robolectric en Android Studio 1.0
  • ¿Hay alguien por ahí usando Robolectric sin Maven en IntelliJ?
  • Probar rutinas de procesamiento de imágenes con robolectric
  • Robolectric vs Android Test Framework
  • Cómo obtener Spannable y su color de TextView para escribir una prueba de unidad
  • Robolectric With Gradle:. \ Res \ values ​​no es un directorio
  • Robolectric - No se pudo cargar la clase: org.robolectric.shadows.ShadowMultiDex
  • No se puede ejecutar la prueba Roboeléctrica
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.