Robolectric不执行Runnable
Robolectric does not execute Runnable
Robolectric (3.1) 应该可以执行发布到处理程序的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]);
}
断言测试失败。我错过了什么吗?
如有任何帮助,我们将不胜感激。
@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]);
}
有同样的问题,
这修复了它:
ShadowLooper threadShadow = shadowOf(thread.getLooper());
threadShadow.runOneTask();
Robolectric (3.1) 应该可以执行发布到处理程序的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]);
}
断言测试失败。我错过了什么吗?
如有任何帮助,我们将不胜感激。
@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]);
}
有同样的问题, 这修复了它:
ShadowLooper threadShadow = shadowOf(thread.getLooper());
threadShadow.runOneTask();