在接受参数的AsyncTask类上进行Robolectric测试AsyncTask

时间:2019-01-20 12:42:50

标签: android unit-testing android-asynctask robolectric

这里有很多答案涉及AsyncTasks Robolectric 测试。但是,我认为我当前的实现可能会略有不同。

我有一个片段,它在调用服务器后显示数据列表。我在这里使用AsyncTask类来执行此后台服务。但是,就测试该功能(获取数据)的最佳方法而言,我面临着一些挑战。

问题1

  1. 一些数据被传递到AsyncTask类的构造函数中,以便继续执行。 如何从测试班级访问这些数据?
  2. 我可以从Test类中调用我已经存在的AsyncTask类吗?如何访问传递给它的参数?

我尝试按照ShadowAsyncTaskTest的{​​{3}}给出的示例进行示例,但是我仍然不确定在我的情况下如何最好地进行。 我正在使用 Robolectric 4.1

我非常感谢有关如何实现此目标的一些指导。谢谢。

下面是我的代码

MyDataListFragment

 private void getTheList(String state) { //This value is passed on from somewhere else

    try {

        Map params = new HashMap();
        if (StringUtils.isNotEmpty(state)) {
            params.put("State", state);
        }
        if (SessionManager.getUserDetails() != null) {
            params.put("User", SessionManager.getUserDetails().getUserId());
        } else {
            populateTheList("{}");
            return;
        }

        FetchDataTask fetchDataTask = new FetchDataTask(params, new MyInterface() {
            @Override
            public void onPreExecute() {
                ((BaseActivity) getActivity()).createDialog(getString(R.string.loading),
                        null);
            }

            @Override
            public void onPostExecute(String result) {
                Log.d(TAG, "fetched result: " + result);
                ((BaseActivity) getActivity()).clearDialog();
                if (result != null && result.startsWith(Constants.IO_EXCEPTION)) {
                    ((BaseActivity) getActivity()).showAlertDialog(getActivity(),
                            getString(R.string.error_network));
                } else {
                    populateTheList(result);
                }
            }
        });
        fetchDataTask.execute((Void) null);

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

我的AsyncTask类

public class FetchDataTask extends AsyncTask<Void, Void, String> {

private final String TAG = this.getClass().getSimpleName();
private MyInterface task;
private Map params;

public FetchDataTask(Map params, MyInterface task) {
    this.params = params;
    this.task = task;
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    task.onPreExecute();
}

@Override
protected String doInBackground(Void... voids) {
    try {
        // default params
        params.put(Constants.PAGE, 0);
        params.put(Constants.PAGE_SIZE, Constants.DEFAULT_PAGE_SIZE);
        params.put(Constants.SORT, "created,desc");

        String url = "/user-data/";
        return CommonHelper.sendGetRequest(BuildConfig.SERVER_URL, url,
                CommonHelper.getParamsFromMap(params));
    } catch (IOException ioe) {
        Log.e(TAG, ioe.getMessage(), ioe);
        return Constants.IO_EXCEPTION;
    }
}

@Override
public void onPostExecute(String result) {
    super.onPostExecute(result);
    task.onPostExecute(result);
}
}

我的测试班

@RunWith(RobolectricTestRunner.class)
public class DataListFragmentTest {

DataListFragment dataListFragment;

@Before
public void setUp() throws Exception{

    Robolectric.getBackgroundThreadScheduler();
    Robolectric.getForegroundThreadScheduler();
}

@Test
public void fragmentIsNotNull() throws Exception{
    dataListFragment = DataListFragment.newInstance();
    assertNotNull(deliveriesFragment);
}

@Test
public void testNormalFlow() throws Exception{

       //Map params = new HashMap();
    //if (StringUtils.isNotEmpty(state)) {
        //params.put("State", state);
   //}
    //if (SessionManager.getUserDetails() != null) {
       // params.put("User", 
      //SessionManager.getUserDetails().getUserId());
   //} else {
       // return;
    //}

      //FetchOrdersTask fetchOrdersTask = new FetchOrdersTask(params);
}
@Test
public void onPreExecute_testDialogShows()throws Exception{

}

@Test
public void doInBackground_CanFetchOrders() throws Exception{

}

@Test
public void onPostExecute_Exception_Is_Caught() throws Exception{

}

@Test
public void onPostExecute_Result_Is_Not_Null() throws Exception{

}

@Test
public void execute_Returns_AsyncTask() throws Exception{

 }
}

0 个答案:

没有答案