【发布时间】:2021-09-13 16:25:17
【问题描述】:
我正在处理的代码库 (NewPipe) 使用 Android Room。它有一个AppDatabase 扩展RoomDatabase (the Android Room class)、一个StreamDAO 和一个StreamEntity。我向StreamEntity 添加了一列,并将@Database 版本从3 增加到4。我还添加了一个从3 到4 的Migration。
问题是之前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()函数实际上只需要在测试中进行数据验证(除了自动迁移验证)。我可以通过在部分迁移的数据库上运行queries 从(部分)迁移的数据库中获取数据,但我无法以StreamEntity 的形式获取数据。
如何测试部分迁移的数据库以及访问部分迁移的数据库上的StreamDAO?
编辑:
我了解(来自 Android Developers Testing Single Migrations)You cannot use DAO classes because they expect the latest schema.。我可以使用 (kotlin) 获取所有数据:
query("SELECT * FROM streams").run {
DatabaseUtils.dumpCursorToString(this)
}
但是,我无法将其转换为 StreamEntity 以便于进行数据测试。
【问题讨论】:
标签: java android kotlin android-room