尝试测试SQLiteOpenHelper但getWritableDatabase()会抛出Null

时间:2015-05-31 02:45:52

标签: java android junit sqliteopenhelper

我正在尝试使用我的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();
    }

}

1 个答案:

答案 0 :(得分:0)

您忘记打开数据库了。做dbh.open()。之后不要忘记关闭你的数据库。