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是我的选择)