2016-05-28 19 views
1

Ich habe ein Problem mit SQLDatabase Tests.SQLiteDatabase UnitTest

Hier einige Teile meines Codes, überspringe ich unwichtige Teile des Codes wie TetsObject Deklaration (enthalten 2 Felder: String ID und String Title) und Definition der Datenbanktabelle und ihrer Felder.

build.gradle:

android { 
    ... 
    testOptions { unitTests.returnDefaultValues = true } 
} 

dependencies { testCompile 'junit:junit:4.12' } 

DatabaseHelper:

public class DatabaseHelper extends SQLiteOpenHelper { 
private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "database.db"; 
private static final String TABLE_TABLE_CREATE = "..."; 

public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(TABLE_TABLE_CREATE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { ... } } 

TableOperations:

public class TableOperations { 
private SQLiteDatabase mDatabase; 

public TableOperations(SQLiteDatabase database) { 
    mDatabase = database; 
} 

public List<TestObject> getEnteries() { ... } 
public TestObject getEntery(String id) { ... } 
public void addEntery(TestObject object) { ... } 
public void updateEntery(String id, TestObject object) { ... } } 

Test:

public class ExampleUnitTest extends AndroidTestCase { 
private SQLiteOpenHelper mDatabaseHelper; 

@Override 
protected void setUp() throws Exception { 
    super.setUp(); 

    Context context =new RenamingDelegatingContext(getContext(), "test_"); 
    mDatabaseHelper = new DatabaseHelper(context); 
} 

@Override 
protected void tearDown() throws Exception { 
    super.tearDown(); 

    mDatabaseHelper.close(); 
} 

@Test 
public void testDatabaseNotNull() throws Exception { 
    assertNotNull("Database is null", mDatabaseHelper.getWritableDatabase()); 
} 

@Test 
public void testDatabaseReading() throws Exception{ 
    // insert some data to database 
    TableOperations operations = new TableOperations(mDatabaseHelper.getWritableDatabase()); 
    // assertEquals test database reading here 
} } 

Ich möchte Datenbankoperationen testen, kann aber nicht, weil der erste Test immer fehlgeschlagen ist, mDatabase immer null.

Antwort

0

Ich habe den Grund für dieses Problem gefunden. Ich habe versucht, diesen Test aus dem Ordner "test" auszuführen, aber sie benötigen einen Kontext für eine Arbeit, also müssen sie sich im Ordner "androidTest" befinden. PS: Für einfache Testfälle kann der Kontext im Ordner 'test' über RoboGuice oder ähnliche Bibliotheken

empfangen werden