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断言去进行相应的判断,备份数据与当前数据库同步
上一篇: SQL update多表关联更新