11

我在Handler使用 Robolectric 测试代码时遇到问题。例如:

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立即运行代码?在我的测试完成执行之前它不会运行。

4

3 回答 3

11

对于 Robolectric 3.0 版,您应该使用: org.robolectric.Robolectric.flushForegroundThreadScheduler

org.robolectric.shadows.ShadowLooper.runUiThreadTasks
org.robolectric.shadows.ShadowLooper.runUiThreadTasksIncludingDelayedTasks

参考:2.4 到 3.0 升级指南

于 2015-08-17T07:56:37.890 回答
8

我认为这应该做一个工作:

Robolectric.runUiThreadTasks();

或者如果安排了多个任务:

Robolectric.runUiThreadTasksIncludingDelayedTasks();
于 2013-09-25T19:45:30.393 回答
4

在 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;
于 2015-11-26T00:41:24.597 回答