Android 测试是否使用Robolectric启动了异步任务

Android 测试是否使用Robolectric启动了异步任务,android,android-asynctask,robolectric,Android,Android Asynctask,Robolectric,我有一个活动,它应该启动一个异步任务,我想用Robolectric 3.0测试这个行为 到目前为止,我是这样做的,但我不是很满意: @Test public void testAsyncTaskIsStarted() { activity = Robolectric.setupActivity(MyActivity.class); Assert.assertTrue(ShadowApplication.getInstance().getBackgroundThreadSchedu

我有一个
活动
,它应该启动一个
异步任务
,我想用Robolectric 3.0测试这个行为

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

@Test
public void testAsyncTaskIsStarted() {
    activity = Robolectric.setupActivity(MyActivity.class);
    Assert.assertTrue(ShadowApplication.getInstance().getBackgroundThreadScheduler().areAnyRunnable());
}
有更好的方法吗


谢谢你的帮助。

我终于用Mockito模拟了我的
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(...);
}

希望这能有所帮助。

我终于用Mockito模拟了我的
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(...);
}

希望这能有所帮助。

对我来说,更好的测试应该是运行这个后台任务并检查发生的事情,但单元测试的全部要点是单独测试组件。这样我就不依赖于任务的行为,特别是当我的AsyncTask正在执行http请求或其他我必须模拟的操作时。啊,对不起,我不知道您对任务结果不感兴趣,而只对某些抽象代码将在另一个线程中运行感兴趣。更明确的是,它将在
AsyncTask
上运行。我建议寻找另一种注入方式(Dagger 2是我的选择),因为对我来说,更好的测试应该是运行这个后台任务并检查发生的事情,但单元测试的整个要点是单独测试组件。这样我就不依赖于任务的行为,特别是当我的AsyncTask正在执行http请求或其他我必须模拟的操作时。啊,对不起,我不知道您对任务结果不感兴趣,而只对某些抽象代码将在另一个线程中运行感兴趣。更明确的是,它将在
AsyncTask
上运行。我建议寻找另一种注入方式(Dagger 2是我的选择),因为对我来说,更好的测试应该是运行这个后台任务并检查发生的事情,但单元测试的整个要点是单独测试组件。这样我就不依赖于任务的行为,特别是当我的AsyncTask正在执行http请求或其他我必须模拟的操作时。啊,对不起,我不知道您对任务结果不感兴趣,而只对某些抽象代码将在另一个线程中运行感兴趣。更明确的是,它将在
AsyncTask
上运行。我建议寻找另一种注射方式(匕首2是我的选择)