2015-05-31 8 views
6

Sto provando a scrivere un test di junit sul mio database di app in Android Studio utilizzando il mio oggetto SQLiteOpenHelper. Ogni volta che colpisce il metodo di inserimento ottengo una NullPointerException. Sono andato avanti e indietro tra l'uso di getContext() e un setup di mockContext ma senza dadi. Ho il mio emulatore attivo e funzionante. Qualcuno può dirmi cosa sto sbagliando?Provare a testare SQLiteOpenHelper ma getWritableDatabase() genera Null

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

Hai trovato una soluzione a riguardo? –

risposta

0

Hai dimenticato di aprire il tuo database. Do dbh.open(). Dopo ciò non dimenticare di chiudere il tuo db.

+1

Ho pensato che è ciò che dovrebbe fare testDB = dbh.getWritableDatabase()? L'aggiunta di dbh.onOpen (testDB) o dbh.onCreate (testDB) colpisce anche Null. – MDM82

Problemi correlati