为什么模拟不能与AsyncTask一起使用? [英] Why doesn't mocking work with AsyncTask?

查看:108
本文介绍了为什么模拟不能与AsyncTask一起使用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用ApplicationTestCase测试一个Android应用程序.我想模拟我的一个AsyncTasks(简化示例以显示问题):

I'm testing an Android app using an ApplicationTestCase. I want to mock one of my AsyncTasks (example simplified to show the problem):

public class Foo extends AsyncTask<Void,Void,Void> {
  @Override
  protected Void doInBackground(Void... unused) {
    return null;
  }
}

所以要设置我的测试,我做了以下事情:

So to set up my tests, I did the following:

private Foo mockFoo;

@Override
protected void setUp() throws Exception {
  super.setUp()

  mockFoo = mock(Foo.class);

  createApplication();
}

然后进行实际测试:

public void testAsyncTaskMock() {
  mockFoo.execute();
  verify(mockFoo).execute();
}

但是mockFoo.execute();运行时出现异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.AsyncTask$Status.ordinal()' on a null object reference

为什么模拟AsyncTask的技术不起作用?

请注意,删除createApplication();会使问题在这种简单情况下消失,但是对于我的实际测试,我确实需要创建该应用程序.

Note that removing createApplication(); causes the problem to go away in this simple case, but for my actual testing I do need the application to be created.

推荐答案

AsyncTask.execute 是最终版本,并且

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆