java安卓房间部分迁移测试
我正在处理的代码库(NewPipe)使用Android Room。它有一个扩展了^{StreamEntity
中添加了一列,并将@Database
版本从3
增加到4
。我还从{
问题是以前有a test测试从版本2
到3
的迁移。当我试图运行测试时,我得到了错误java.lang.IllegalStateException: A migration from 3 to 4 was required but not found. Please provide the necessary Migration path via RoomDatabase.Builder.addMigration(Migration ...) or allow for destructive migrations via one of the RoomDatabase.Builder.fallbackToDestructiveMigration* methods.
。我可以通过将.addMigrations(MIGRATION_3_4)
添加到this line来修复此错误。但这也会运行从版本3
到4
的迁移,我想将其隔离到一个单独的测试中
实际上getMigratedDatabase()
函数只在数据验证测试中需要(除了自动迁移验证之外)。通过在部分迁移的数据库上运行^{StreamEntity
的形式获取数据
如何测试部分迁移数据库以及访问部分迁移数据库上的StreamDAO
编辑:
我(从测试单一迁移的Android开发人员那里)了解到You cannot use DAO classes because they expect the latest schema.
。我可以通过(kotlin)获取所有数据:
query("SELECT * FROM streams").run {
DatabaseUtils.dumpCursorToString(this)
}
但是,我无法将其转换为StreamEntity
以便于数据测试
# 1 楼答案
如果要测试只迁移了一半的数据,则必须创建匹配的(遗留)DB、dao和实体(不推荐)
我认为您最好先阅读单独的列值,然后检查这些值,或者自己获取这些值并构造实体
类似于以下内容(Java):
然后为整个迁移(到v4)添加另一个测试,在那里您可以使用Dao方法直接检查StreamEntity,并确认Dao正在正确构建StreamEntity