机器人运行处理程序帖子



我在使用 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;

相关内容