【问题标题】:SQLiteDatabse unitTestSQLiteDatabse unitTest
【发布时间】: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


    【解决方案1】:

    我找到了这个问题的原因。 我试图从'test'文件夹运行这个测试,但他们需要一个工作的上下文,所以他们必须位于文件夹'androidTest'中。 PS:对于简单的测试用例,可以通过 RoboGuice 或类似的库在“测试”文件夹中接收上下文

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2015-03-13
      • 2020-09-04
      • 2018-10-03
      • 2013-07-09
      • 2022-08-22
      相关资源
      最近更新 更多