Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Robolectric 3.0, no pudo probar una función que inicia un HandlerThread

Tengo un Job clase simple que se extiende HandlerThread :

 public class Job extends HandlerThread{ public Job(String name) { super(name); } ... } 

Entonces, tengo una clase de JobUtils que tiene una función para conseguir un Job & start() :

 public JobUtils { public JobUtils() { } // I unit test this function in my test class below public Job getAndStartJob(String name) { Job job = new Job(name); job.start(); } } 

Utilizo Robolectric 3.0 en mi prueba de unidad, JobUtils la getAndStartJob(String name) ' getAndStartJob(String name) :

 @RunWith(RobolectricTestRunner.class) public class TestJobUtils{ @Test public void testGetAndStartJob() { JobUtils jobUtils = new JobUtils(); // error here jobUtils.getAndStartJob(“test-job”); … } } 

Cuando ejecuto mi código de prueba de unidad, tengo el error

 Exception in thread "test-job” java.lang.NullPointerException at org.robolectric.shadows.ShadowLooper.getMainLooper(ShadowLooper.java:70) at org.robolectric.shadows.ShadowLooper.doLoop(ShadowLooper.java:85) at org.robolectric.shadows.ShadowLooper.loop(ShadowLooper.java:76) at android.os.Looper.loop(Looper.java) at android.os.HandlerThread.run(HandlerThread.java:60) 

Parece que Robolectric no es capaz de iniciar el HandlerThread (el job instace en mi código), o me falto algo? ¿Cómo deshacerse de este problema?

  • Roboelectric RoboAttributeSet - Cómo usar esto
  • Assert ImageView se cargó con un ID de recurso específico extraíble
  • Cómo activar el registro roboeléctrico
  • Obtención del campo `ViewDataBinding` de actividad dentro de la prueba de unidad 'Robolectric` después de ser asignado
  • ¿Cómo puedo detectar con Robolectric que onBackPressed se llama programáticamente?
  • ¿Cómo funcionan exactamente los objetos Shadow personalizados en Robolectric?
  • Robolectric - screen_action_bar.xml line # -1 (lo siento, aún no implementado): Error al inflar la clase <unknown>
  • Prueba de tareas asíncronas con robolectric
  • One Solution collect form web for “Robolectric 3.0, no pudo probar una función que inicia un HandlerThread”

    Me enfrenté a un problema similar, no estoy seguro de si su razón es la misma porque he usado RobolectricGradleTestRunner y no ha publicado todo el cuerpo del método de prueba. En mi caso resulta que la aplicación de Robolectric ( RuntimeEnvironment.application ) se establece en null (fuente de NPE) antes de que HandlerThread comience a ejecutarse porque el método de prueba llega al final anterior.

    La solución consiste en esperar todos los resultados programados al final del método de prueba:

      Robolectric.flushBackgroundThreadScheduler(); Robolectric.flushForegroundThreadScheduler(); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.