Trying to check SQLiteOpenHelper, but getWritableDatabase () throws Null

I am trying to write a junit test with my application database in Android Studio using my SQLiteOpenHelper object. Every time it hits the insert method, I get a NullPointerException. I went back and forth between using getContext () and setting up mockContext I, but without the dice. I have an emulator and it works. Can someone please tell me what I am 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(); } } 
+6
source share
1 answer

You forgot to open your database. Do dbh.open (). After that, do not forget to close your db.

0
source

Source: https://habr.com/ru/post/988250/


All Articles