I'm trying to write a junit test against my apps database in Android Studio using my SQLiteOpenHelper object. Every time it hits the insert method I get a NullPointerException. I've gone back and forth between using getContext() and a mockContext I setup but no dice. I have my emulator up and running. Can someone please tell me what I'm doing wrong?
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();
}
}