0

我有一个名为 CallWcfTask 的类,它从extends AsyncTask<Void, Void, Void>. 我已经声明了这些字段:

private String _CiName;
private CallWcfCallBack wcfCallBack;
private SQLiteDatabase _Db;
private List<String[]> infoList = new ArrayList<>();

在 doInBackground 方法中,我从我的服务中获取了数据,并将数据放入List<String[]>.

protected Void doInBackground(Void... voids) {
    try {

        String s = EsupFactory.getConfigString(SETTING_ROOT_CI) + "GetCI";
        JSONObject jsonObj = HttpUtil.requestJson(s, HttpUtil.HttpMethod.Post,
                new JSONObject().put("PCiName", _CiName).toString());
        JSONArray jCiArray = jsonObj.getJSONArray("GetCIResult");
        if (jCiArray != null || !jCiArray.isNull(0)) {

            for (int i = 0; i < jCiArray.length(); i++) {
                try {
                    JSONObject tmpobj = jCiArray.getJSONObject(i);
                    String TmpId = String.valueOf(tmpobj.getInt("Id"));
                    String TmpTitle = tmpobj.getString("Title");
                    infoList.add(new String[]{TmpId, TmpTitle});

                } catch (JSONException e) {

                    e.printStackTrace();
                }
            }

            insert(infoList);

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}

最后我通过调用insert 方法插入到我的数据库中。

    public boolean insert(List<String[]> infoList) {
    for (String[] value :
            infoList) {
        ContentValues insertValues = new ContentValues();
        insertValues.put("ID", Integer.valueOf(value[0]));
        insertValues.put("Title", value[1]);
        long insert = _Db.insert(_CiName, null, insertValues);
        if(insert == -1)
            return false;
    }
    return true;
}

现在,我想对插入方法进行单元测试。我写了打击测试:

@RunWith(JUnit4.class)
public class CallWcfTaskTest extends TestCase {
CallWcfTask wcfTask;
List<String[]> strings;

@Before
public void onCreate() {
    System.out.println("Test Started");
    strings = new ArrayList<>();
    for (int i = 0; i < 30; i++) {

        String[] testlist = {i+"", "ali"+i};
        strings.add(testlist);
    }
    wcfTask = new CallWcfTask();
}

@Test
public void insertTest() {
    assertEquals(true,wcfTask.insert(strings));

}
}

但是当我运行这个测试时,我得到了这个错误:

    Test Started
java.lang.NullPointerException
at com.safarayaneh.engineer.task.CallWcfTask.insert(CallWcfTask.java:79)
at com.safarayaneh.engineer.task.CallWcfTaskTest.insertTest(CallWcfTaskTest.java:33)

在我的插入方法中,我正在使用SQLiteDatabase _Db. 我如何在我的场景中测试我的方法?

*****************编辑*****************

我从 ClsCI 类构造函数中打开了我的数据库:

    public ClsCI(String pCiName, Context pcontext) {
    datasource = new DataSource(pcontext);
    dbhelper = new DatabaseHelper(pcontext);
    _Db = dbhelper.getWritableDatabase();

    _CiName = pCiName;
    _Context = pcontext;
}

我已经从这个类中执行了 CallWcfTask 并且我已经将此 _Db 作为参数传递给我的任务。

4

0 回答 0