我正在尝试使用我的SQLiteOpenHelper对象在Android Studio中针对我的应用数据库编写junit测试。每次遇到insert方法我都会得到一个NullPointerException。我在使用getContext()和我设置的mockContext之间来回走动,但没有骰子。我启动并运行了我的模拟器。有人可以告诉我我做错了吗?
public class LocationDatabaseHelperTest extends AndroidTestCase {
private SQLiteDatabase testDB;
private SQLiteDatabase readDB;
private LocationDatabaseHelper dbh;
private RenamingDelegatingContext mockContext;
private ContentValues cv;
/**
*Sets up a mock context to initialize the
* LocationDatabaseHelper object.
* @throws Exception
*/
public void setUp() throws Exception {
super.setUp();
final String prefix = "test";
mockContext = new RenamingDelegatingContext(getContext(),prefix);
dbh = new LocationDatabaseHelper(mockContext);
try {
testDB = dbh.getWritableDatabase();
} catch(Exception ex){
ex.printStackTrace();
}
readDB = dbh.getReadableDatabase();
cv = new ContentValues();
}
/**
*Tests that asserts LocationDatabaseHelper object instantiates.
*/
public void testLocationDatabaseHelper() {
assertNotNull(dbh);
}
public void testInsert() {
String id = "seattle";
float heading = (float) 20.178545;
double longitude = 122.20;
double lat = 47.37;
float speed = (float) 65.4587;
long time = System.currentTimeMillis();
LocationPackage locations = new LocationPackage(id,heading,longitude, lat,speed, time);
cv.put(dbh.COLUMN_LOCATION_id, (String) locations.id);
cv.put(dbh.COLUMN_LOCATION_HEADING, (float) locations.heading);
cv.put(dbh.COLUMN_LOCATION_lat, (double) locations.latitude);
cv.put(dbh.COLUMN_LOCATION_SPEED, (float) locations.speed);
cv.put(dbh.COLUMN_LOCATION_long, (double) locations.longitude);
cv.put(dbh.COLUMN_LOCATION_TIMESTAMP, (long) locations.time);
testDB.insert(dbh.TABLE_LOCATION, null, cv);
String selectQuery = "SELECT * FROM " + dbh.TABLE_LOCATION;
Log.i(dbh.toString(), selectQuery);
Cursor c = readDB.rawQuery(selectQuery, null);
if(c!=null)
c.moveToFirst();
String locID = c.getString(c.getColumnIndex(dbh.COLUMN_LOCATION_id));
//Log.i("LocationID: ", locID);
assertEquals(locID, "userid");
//assertTrue(insertID != -1);
}
public void tearDown() throws Exception {
super.tearDown();
//dbh.clearDatabase();
}
}
答案 0 :(得分:0)
您忘记打开数据库了。做dbh.open()。之后不要忘记关闭你的数据库。