Robolectric 3.0, не удалось проверить функцию, которая запускает HandlerThread

У меня есть простой класс Job который расширяет HandlerThread :

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

Затем у меня есть класс JobUtils который имеет функцию, чтобы получить 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(); } } 

Я использую Robolectric 3.0 в своем модульном тесте, я тестирую класс 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”); … } } 

Когда я запускаю свой модульный тестовый код, я получил ошибку

 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) 

Похоже, что Robolectric не может запустить HandlerThread ( job в моем коде), или мне что-то не хватает? Как избавиться от этой проблемы?

Solutions Collecting From Web of "Robolectric 3.0, не удалось проверить функцию, которая запускает HandlerThread"

Я столкнулся с подобной проблемой, не уверен, что ваша причина такая же, потому что я использовал RobolectricGradleTestRunner и вы не опубликовали весь метод метода тестирования. В моем случае выясняется, что приложение RuntimeEnvironment.application ( RuntimeEnvironment.application ) установлено RuntimeEnvironment.application null (источник NPE) до того, как HandlerThread начнет выполнение, потому что метод теста достигает конца раньше.

Обходным решением является ожидание всех запланированных runnables в конце метода тестирования:

  Robolectric.flushBackgroundThreadScheduler(); Robolectric.flushForegroundThreadScheduler();