【发布时间】:2016-05-28 19:30:56
【问题描述】:
我对 SQLDatabase 测试有疑问。
这里我的代码的某些部分,我跳过不重要的部分代码,如 TetsObject 声明(包含 2 个字段:字符串 id 和字符串标题)和数据库表及其字段的定义。
build.gradle:
android {
...
testOptions { unitTests.returnDefaultValues = true }
}
dependencies { testCompile 'junit:junit:4.12' }
数据库助手:
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) { ... } }
表格操作:
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) { ... } }
测试:
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
} }
我想测试数据库操作但不能,因为第一次测试总是失败,mDatabase 总是为空。
【问题讨论】:
标签: android sqlite testing junit4