gpt4 book ai didi

android - 测试房间迁移,无法在 Assets 文件夹中找到架构文件 [room-migration]

转载 作者:行者123 更新时间:2023-11-30 04:58:39 24 4
gpt4 key购买 nike

这个问题是在我决定向房间数据库添加另一个实体之后出现的。正在将模式导出到预期目录中。所有 build.gradle 设置都已完成并且似乎可以正常工作但实际上没有。因为我得到了:

java.io.FileNotFoundException: Cannot find the schema file in the assets folder. Make sure to include the exported json schemas in your test assert inputs. 
See https://developer.android.com/training/data-storage/room/migrating-db-versions#export-schema for details. Missing file: com.company.companyapp.db.AppStore/1.json

事实上,两个 json 模式都在生成,但测试运行器无法找到此类文件。这是 gradle 设置:

testOptions.unitTests.includeAndroidResources = true

defaultConfig {
...
multiDexEnabled true
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/store".toString()]
}
}

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
android.compileOptions.sourceCompatibility 1.8
android.compileOptions.targetCompatibility 1.8
}

sourceSets {
androidTest.assets.srcDirs += files("$projectDir/store".toString())
}

dependencies {
def roomVersion = '2.2.1'
// Other deps ...
implementation "androidx.room:room-runtime:$roomVersion"
implementation "androidx.room:room-rxjava2:$roomVersion"
annotationProcessor "androidx.room:room-compiler:$roomVersion"
testImplementation "androidx.room:room-testing:$roomVersion"

androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation "androidx.test:core:$testCoreVersion"
androidTestImplementation "androidx.test.ext:junit:$extJUnitVersion"
testImplementation "androidx.test:core:$testCoreVersion"
testImplementation "androidx.test.ext:junit:$extJUnitVersion"
testImplementation "org.robolectric:robolectric:4.2.1"
}

我还注意到 Studio IDE 标记了 json 架构目录持有者 enter image description here

通过查看 google room migration examples 我可以看到有区别,而且不是在谈论名称。
enter image description here

所以很明显,gradle 插件正在做一些与我预料的不同的事情,或者文档说它应该可以工作,但实际上没有。

at androidx.room.testing.MigrationTestHelper.loadSchema(MigrationTestHelper.java:320)
at androidx.room.testing.MigrationTestHelper.createDatabase(MigrationTestHelper.java:152)
at com.company.companyapp.MigrationTest.migrate1To2(MigrationTest.java:32)

最佳答案

使用 PaulWoitaschek 找到的解决方法适用于 Robolectric 4.3:

在您应用的 build.gradle 上的 debug souceSets 上添加 schemas 目录

时髦

    sourceSets {
debug.assets.srcDirs += files("$projectDir/schemas".toString())
}

Kotlin DSL

    sourceSets {
getByName("debug").assets.srcDirs(files("$projectDir/schemas")) // Room
}

关于android - 测试房间迁移,无法在 Assets 文件夹中找到架构文件 [room-migration],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58663990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com