天天看點

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斷言去進行相應的判斷,備份資料與目前資料庫同步