2016-07-04 3 views
1

Robolectric (3.1) должен быть способен выполнить runnable, отправленный обработчику.Robolectric не выполняет Runnable

@Test 
public void shouldExecuteRunnable() throws Exception { 
    final CountDownLatch signal = new CountDownLatch(1); 
    final boolean[] result = {false}; 
    Runnable runnable = new Runnable() { 

     @Override 
     public void run() { 
      result[0] = true; 
      signal.countDown(); 
     } 
    }; 

    HandlerThread handlerThread = new HandlerThread("HandlerThread"); 
    handlerThread.start(); 
    Handler handler = new Handler(handlerThread.getLooper()); 
    handler.post(runnable); 

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

    signal.await(5, TimeUnit.SECONDS); 

    Assert.assertTrue(result[0]); 
} 

Испытание с ошибкой при утверждении. Я что-то упускаю?

Любая помощь будет оценена по достоинству.

ответ

2
@Test 
public void shouldExecuteRunnable() throws Exception { 
    final boolean[] result = {false}; 

    Runnable runnable = new Runnable() { 

     @Override 
     public void run() { 
      result[0] = true; 
     } 
    }; 

    ShadowLooper.pauseMainLooper(); 

    Handler handler = new Handler(); 
    handler.post(runnable); 

    ShadowLooper.runMainLooperOneTask(); 

    Assert.assertTrue(result[0]); 
} 
0

Если бы тот же вопрос, Это зафиксировал его:

 ShadowLooper threadShadow = shadowOf(thread.getLooper()); 
     threadShadow.runOneTask();