我试图测试下一个代码:
public class MessagerTest extends TestCase {
Messager mClassToTest;
Context mArg1;
String mArg2;
protected void setUp() throws Exception {
mClassToTest=new Messager();
mArg1= getTestContext();
mArg2= "5556";
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testscreateConnection(){
assertTrue(mClassToTest.createConnection(mArg1, mArg2));
}
public void testsadd()
{
assertEquals(11, mClassToTest.add(5, 6));
}
/**
* @return The {@link Context} of the test project.
*/
private Context getTestContext()
{
try
{
Method getTestContext = ServiceTestCase.class.getMethod("getTestContext");
return (Context) getTestContext.invoke(this);
}
catch (final Exception exception)
{
exception.printStackTrace();
return null;
}
}
}
我正在测试的代码是
public boolean createConnection(Context context, String number)
{
DatabaseHandler db = new DatabaseHandler(context);
contact = db.getContactByNumber(number);
String id = String.valueOf(contact.getID());
if(id.equals("0"))
{
// send message
PendingIntent pi = PendingIntent.getActivity(context, 0,
new Intent(context, CreateConnection.class), 0);
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm",
Locale.UK);
currentDateandTime = sdf.format(new Date());
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, "1|031|", pi, null);
// add to db
db.addContact(new Contact("", number, "",
"", 2, "40", currentDateandTime));
return true;
}else{
return false;
}
}
由于某些原因,当我运行测试时,对于testscreateConnection
,它似乎在contact = db.getContactByNumber(number);
的第一行失败并且NullPointerException
。失败发生在函数SQLiteDatabase db = this.getReadableDatabase();
getContactByNumber代码:
public Contact getContactByNumber(String number)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
KEY_NAME, KEY_PH_NO, KEY_PUB_KEY, KEY_IDENTIFIER, KEY_DELETE,
KEY_STATUS, KEY_DATETIME }, KEY_PH_NO + "=?",
new String[] { number }, null, null, null,
null);
if(cursor.getCount() > 0)
{
if(cursor != null)
{
cursor.moveToFirst();
}
Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3),
cursor.getString(4), Integer.parseInt(cursor.getString(5)),
cursor.getString(6), cursor.getString(7));
// return contact
return contact;
}else{
Contact contact = new Contact();
return contact;
}
}
我该如何解决这个问题? 有点让我觉得数据库不存在于测试版本中吗?
答案 0 :(得分:0)
必须更新测试用例中的第一行,TestCase
到ActivityTestCase
和上下文到mArg1= getInstrumentation().getTargetContext();
public class MessagerTest extends ActivityTestCase {
Messager mClassToTest;
Context mArg1;
String mArg2;
protected void setUp() throws Exception {
mClassToTest=new Messager();
mArg1= getInstrumentation().getTargetContext();
mArg2= "5558";
super.setUp();
}