wic*_*her 5 android android-sqlite android-room
Android 上的 Room 具有一种机制,您可以通过该机制将数据库架构导出为 JSON,然后针对单元测试套件中导出的架构验证数据库迁移。我在具有多个主键的表上遇到了一个问题,其中在运行迁移后主键位置都是 1。然而,模式导出的 V1 和 V2 都以相同的顺序列出了主键。此外,导出到 JSON 的表架构包含[]索引的空列表 ( ),而内存测试数据库是使用索引的空值创建的。
我很好奇这是否是 Room 中的错误,或者我是否可能滥用测试框架。给定迁移中的唯一变化是添加了一个全新且不相关的表。这是我的测试代码:
@RunWith(RobolectricTestRunner::class)
class MigrationTest {
@Rule @JvmField
val helper: MigrationTestHelper = MigrationTestHelper(
InstrumentationRegistry.getInstrumentation(),
ApplicationDatabase::class.java.canonicalName,
FrameworkSQLiteOpenHelperFactory()
)
@Test
@Throws(IOException::class)
fun `Test migration from 1 to 2`() {
helper.createDatabase(TEST_DB, 1).apply {
close()
}
helper.runMigrationsAndValidate(TEST_DB, 2, true, MIGRATION_1_2)
}
companion object {
const val TEST_DB = "migration-test"
}
}
Run Code Online (Sandbox Code Playgroud)
运行此测试时,出现以下错误:
java.lang.IllegalStateException: Migration didn't properly handle: Foo
Expected: TableInfo{name='Foo', columns={bar=Column{name='bar', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, baz=Column{name='baz', type='TEXT', affinity='3', notNull=true, primaryKeyPosition=2, defaultValue='null'}}, foreignKeys=[], indices=[]}
found: TableInfo{name='Foo', columns={bar=Column{name='bar', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}, baz=Column{name='baz', type='TEXT', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'}}, foreignKeys=[], indices=null}
Run Code Online (Sandbox Code Playgroud)
显示列顺序的 JSON 模式导出片段在两种情况下是相同的。
1.json:
"tableName": "Foo",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`bar` INTEGER NOT NULL, `baz` INTEGER NOT NULL, PRIMARY KEY(`bar`, `baz`))",
Run Code Online (Sandbox Code Playgroud)
2.json:
"tableName": "Foo",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`bar` INTEGER NOT NULL, `baz` INTEGER NOT NULL, PRIMARY KEY(`bar`, `baz`))",
Run Code Online (Sandbox Code Playgroud)
Nic*_*as 0
我遇到过同样的问题。我通过更新 robolectric 解决了这个问题:从 4.3 到 4.5.1。
请参阅: https: //github.com/robolectric/robolectric/issues/4209
robolectric 4.5版本中已推送针对此问题的补丁
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |