如何在发行版之间进行数据库迁移单元测试

时间:2015-04-15 09:15:14

标签: android sqlite migration greendao

我有一个Android应用程序,其数据库版本为1。

我在一个表中添加了一个数据列,并且忘记了迁移到新版本。

我遇到的问题是如何为此进行单元测试。我需要检查旧数据是否在新结构中插入正确,并且以正确的方式添加和填充新列。

我最好怎么做?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以创建一个测试用例,用于构建旧版本的数据库,然后运行迁移。这是一个精简的例子。

public class DbHelperTest extends AndroidTestCase {
private SQLiteDatabase db;

@Override
public void setUp() throws Exception {
    super.setUp();
    mContext = new RenamingDelegatingContext(getContext(), "db_helper_test_");
    SQLiteDatabase.CursorFactory cursorFactory = new SQLiteDatabase.CursorFactory() {

        @Override
        public Cursor newCursor(final SQLiteDatabase db, final SQLiteCursorDriver masterQuery, final String editTable,
                                final SQLiteQuery query) {
            return new SQLiteCursor(db, masterQuery, editTable, query);
        }
    };
    db = SQLiteDatabase.create(cursorFactory);

    createV14Db(db);
}

@Override
public void tearDown() throws Exception {
    super.tearDown();
    db.close();
}

private void createV14Db(SQLiteDatabase db) {
    // Create tables and indices
    db.execSQL(...);

    // Create some data
    db.execSQL(...);
}

public void testDbUpgrade() {
    DbHelper dbHelper = new DbHelper(mContext);
    dbHelper.onUpgrade(db, 14, 100);

    // Check that things have been upgraded correctly
}
}

答案 1 :(得分:0)

您必须测试两种情况:

  1. 用户直接安装新版本。
  2. 用户使用旧版本并升级到新版本。
  3. 测试第二种情况通常很棘手。

    我通常做的测试方案2是:

    1. 从移动设备上卸载应用。
    2. 我切换到第1版的代码版本 - 请注意我使用GIT,因此很容易切换到旧版本。
    3. 使用Android studio在设备上运行应用。
    4. 创建一些测试数据。
    5. 切换到第2版代码。
    6. 在Android studio中开始调试。此时在数据库升级方法中有断点,以确保数据库升级顺利。
    7. 继续进行其余的测试。