2015-05-31 16 views
6

'u atar SQLhomeHelper nesneyi kullanarak Android Studio'daki uygulama veritabanına karşı bir deneme testi yazmaya çalışıyorum. Ekleme yöntemine her vurduğunda, bir NullPointerException alıyorum. GetContext() ve bir mockContext I kurulumunu kullanmam arasında gidip geldim ama zar yok. Emülatörüm çalışıyor ve çalışıyor. Birisi bana neyi yanlış yaptığımı söyler mi?SQLiteOpenHelper'ı test etmeye çalışırken ama getWritableDatabase() 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

Bu konuda bir çözüm buldunuz mu? –

cevap

0

Veritabanınızı açmayı unutmuşsunuzdur. Dbh.open() yapın. Bundan sonra db'nizi kapatmayı unutmayın.

+1

TestDB = dbh.getWritableDatabase() 'nin yapması gereken bu muydu? Dbh.onOpen (testDB) veya dbh.onCreate (testDB) eklemek de Null'a ulaşır. – MDM82

İlgili konular