天天看点

android 针对数据库版本升级的单元测试

对于已经发布的app,进行数据库版本升级时,必须要考虑用户原有的旧数据是否能够兼容新版本数据库,最基础的做法就是将备份数据导入app新版本中,进行全面测试,判断应用程序是否出错,但这种做法很难做到万无一失,而且耗费成本非常高,而还有一种简单有效的方法就是写单元测试,

目前,升级数据库的时候,我的基本思路是,旧数据库文件copy到当前app应用数据库文件中,然后重新new DbHelper(),并

getWritableDatabase();

具体代码

@Test
    public void upgradeVersionToV8() throws IOException, InterruptedException {

        /**
         * 数据库版本:v5 -> v8
         */
        DataBaseAdapter dataBaseAdapterV5toV8;
        String dbPathV5toV8 = mContext.getDatabasePath("dbName.db").getPath(); //数据库默认路径
        File dbV5 = new File("src/test/java/com/xxxxx/database_v5.db");  //备份数据库路径
        String dbV5Path = dbV5.getAbsolutePath();
        FileChannel dbNewV5toV8 = new FileOutputStream(dbPathV5toV8).getChannel(); //目标数据
        FileChannel dbOldV5 = new FileInputStream(dbV5Path).getChannel();  //源数据
        dbNewV5toV8.transferFrom(dbOldV5, 0, dbOldV5.size());
        dbNewV5toV8.close();
        dbOldV5.close();


        dataBaseAdapterV5toV8 = new DataBaseAdapter(mContext);
        dataBaseAdapterV5toV8.open();
        System.out.println(dbPathV5toV8);  
           

DataBaseAdapter的open方法具体逻辑

/**
     * 打开数据库,返回数据库对象
     *
     * @throws SQLException
     */
    public void open() throws SQLException {
        if (isOpen()) {
            return;
        } else {
            mDbHelper = new DbHelper(mContext, DATABASE_NAME, DATABASE_VERSION);
            mSQLiteDatabase = mDbHelper.getWritableDatabase();
        }
    }
           

然后就可以通过Assert断言去进行相应的判断,备份数据与当前数据库同步