使用Robolectric测试异步任务

27

你知道如何使用Robolectric实现AsyncTasks的单元测试吗? 任何指针都将不胜感激。

2个回答

18

在任务上调用execute(...),然后等待结果,请调用Robolectric.runBackgroundTasks()/Robolectric.flushBackgroundThreadScheduler(),然后您就可以进行断言。

@Test
public void test() {
    //create task
    MyAsyncTask asyncTask = new MyAsyncTask();

    //start task
    asyncTask.execute(...);

    //wait for task code
    // Robolectric.runBackgroundTasks(); (pre 3.0)
    Robolectric.flushBackgroundThreadScheduler(); //from 3.0

    //can run asserts on result now
    assert...(asyncTask.get());
}

1
我在执行此操作时一直收到错误信息“java.lang.IllegalStateException: this action is not supported in PAUSED mode.”。Robolectric版本为4.6.1,运行于SDK 30。 - Oliver Metz
2
@OliverMetz 提出一个新问题。 - weston

7

在 Robolectric 2.4 中,这现在位于 ShadowApplication 中:

ShadowApplication.runBackgroundTasks();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接