我有一个名为 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 作为参数传递给我的任务。