欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-01 16:46:10
...

对于已经发布的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断言去进行相应的判断,备份数据与当前数据库同步

相关标签: unit test