当前位置: 首页 > 知识库问答 >
问题:

测试室迁移,在资产文件夹[room migration]中找不到架构文件

太叔英卫
2023-03-14

这个问题是在我决定将另一个实体添加到房间数据库之后出现的。架构正在预期目录中导出。所有的建筑。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"
}

因此,很明显gradle插件所做的事情与iSpect或文档中所说的有所不同,但事实并非如此。

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)

共有3个答案

长孙鸿振
2023-03-14

您应该将其包装在android中:

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

然后建立项目

张溪叠
2023-03-14

还请确保在创建MigrationTestHelper时插入实际的数据库。类。我弄糊涂了,设置了我的实体。类,从而导致相同的错误。

万楷
2023-03-14

使用PaulWoitaschek发现的这种变通方法,我可以使用Robolectric 4.3:

在你的应用程序的build.gradle上添加调试souceSets的模式目录

棒极了

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

静态编程语言DSL

    sourceSets {
        getByName("debug").assets.srcDirs(files("$projectDir/schemas")) // Room
    }
 类似资料:
  • 我的身材。gradle文件,我使用的是kapt,而不是java的注释处理器 exportSchema设置为true的My RoomDatase基类 数据库方案get已导出并保存为json文件[1]:https://i.stack.imgur.com/r3Iew.png 但我的迁移测试还是会出错 我已经尝试了这里的所有stackoverflow解决方案,如:

  • 我的构建环境突然出现问题,我不知道为什么。我可以使用gradlew desktop运行我的项目:run然而,当我尝试使用右键单击run as desktop application(当然是在桌面项目上)从Eclipse运行项目时,它突然找不到我的包。阿特拉斯档案。毫无疑问,该文件存在。我已经多次刷新了我的eclipse项目,并且该项目使用gradle命令行运行良好。昨天天气很好。我能想到的唯一一件

  • 我在我支持的许多应用程序中实现了Flyway,它像梦一样工作。 但是,当我将应用程序部署到测试环境时,迁移就停止了。 经过一些调查,我发现当迁移被加载到jar文件中时,它们不是通过Flyway定位的,而是当它们没有被压缩时(比如当我在Eclipse中工作时,或者如果我将jar解压到类路径中),它会按预期工作。 由于应用程序的插件架构,我无法使用“默认”设置,因此我将Flyway对象设置为: 如果要

  • 方法:获取 现状:404 注意:URL应该是http://localhost:8080/dragonline/resources/img/icon.png()

  • 我对Room或idk有一个问题,问题出在哪里,我需要帮助找出问题出在哪里,我使用的是Hilt DI,当创建数据库实例时它崩溃了,这是我的代码 错误 建筑格拉德尔 托多达塔。kt 托多达贝斯。kt ToDovidewModel。kt 应用模块。kt 添加片段。kt 这是我调用的函数,用于从AddFraank插入数据 我已经在这里看到了一些关于同一个问题的问题,但它对我不起作用,所以我想知道问题在哪里

  • 我使用的是spring boot 1.4.4,我有一个测试类,比如: 这是我的application.yml: application.yml是读取的,因为我将该值存储在字符串路径值中,conf.json位于/src/main/resources和/src/test/resouces中 但我要做什么:mapper.readtree(新URL(路径));我得到错误:文件找不到。 我试过:“class