我在使用 Robolectric 测试Handler
代码时遇到问题。例如:
public class Client {
private Handler mMainThreadHandler;
public interface Callback{
void ok();
}
public Client() {
mMainThreadHandler = new Handler(Looper.getMainLooper());
}
public void doSomeStuff(Callback callback){
//doing...
mMainThreadHandler.post(new Runnable(){
@Override public void run() {
callback.ok();
}
});
}
}
如何立即运行Runnable
中的代码?在我的测试完成执行之前,它不会运行。
对于 Robolectric 版本 3.0,您应该使用: org.robolectric.Robolectric.flushForegroundThreadScheduler
或 org.robolectric.shadows.ShadowLooper.runUiThreadTasks
org.robolectric.shadows.ShadowLooper.runUiThreadTasksIncludingDelayedTasks
参考:2.4 至 3.0 升级指南
我认为这应该可以做:
Robolectric.runUiThreadTasks();
或者,如果计划了多个任务:
Robolectric.runUiThreadTasksIncludingDelayedTasks();
在 Robolectrie 3.0 中你可以做
HandlerThread thread = new HandlerThread("test");
thread.start();
Handler handler = new Handler(thread.getLooper());
handler.post(new Runnable() {run(){
int a = 0;
}};
((ShadowLooper) ShadowExtractor.extract(thread.getLooper())).idle(); // this will execute line int a = 0;