测试使用Robolectric启动AsyncTask

时间:2015-06-03 13:53:37

标签: android android-asynctask robolectric

我有Activity应该启动AsyncTask,我想使用Robolectric 3.0来测试这种行为。

到目前为止,我是这样做的,但我对此并不满意:

@Test
public void testAsyncTaskIsStarted() {
    activity = Robolectric.setupActivity(MyActivity.class);
    Assert.assertTrue(ShadowApplication.getInstance().getBackgroundThreadScheduler().areAnyRunnable());
}

有更好的方法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我终于通过用Mockito嘲笑我的AsyncTask来做到这一点。 在我的Activity中,我将AsyncTask作为一个类字段提取出来,以便能够模拟它:

public void MyActivity extends Activity {
    MyAsyncTask task;

    public void onCreate (...) {
        ...
        if (task == null)
            task = new MyAsyncTask();

        task.execute(...);
        ...
    }

在我的测试中:

MyAsyncTask asyncTaskMock = Mockito.mock(MyAsyncTask.class);    

@Test
public void testAsyncTaskIsStarted() {
    controller = Robolectric.buildActivity(MyActivity.class);
    controller.get().task = asyncTaskMock;
    controller.create().resume().visible();

    Mockito.verify(asyncTaskMock).execute(...);
}

希望这有帮助。