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

测试室迁移。无法在资产文件夹中找到架构文件

许招
2023-03-14

我的身材。gradle文件,我使用的是kapt,而不是java的注释处理器

 defaultConfig {
        ...
        kapt {
            arguments {
                arg("room.schemaLocation", "$projectDir/schemas".toString())
            }
        }


    }
    sourceSets {

        androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
    }

exportSchema设置为true的My RoomDatase基类


@Database(entities = [DB_Open::class],version = 4, exportSchema = true)

数据库方案get已导出并保存为json文件[1]:https://i.stack.imgur.com/r3Iew.png

但我的迁移测试还是会出错

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.crop2cash.gather.data.GatherDatabase/1.json
at androidx.room.testing.MigrationTestHelper.loadSchema(MigrationTestHelper.java:320)
at androidx.room.testing.MigrationTestHelper.createDatabase(MigrationTestHelper.java:152)
at com.crop2cash.gather.MigrationsTest.migrate1to2(MigrationsTest.kt:29)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at androidx.test.ext.junit.runners.AndroidJUnit4.run(AndroidJUnit4.java:104)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:392)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2189)

我已经尝试了这里的所有stackoverflow解决方案,如:

sourceSets {

        getByName("debug").assets.srcDirs(files(projectDir, "schemas"))
    }

    sourceSets {


        getByName("androidTest") {
            assets.srcDirs(files(projectDir, "schemas"))
        }
    }

共有1个答案

章翔宇
2023-03-14

从经验来看,这个问题的一个可能来源是包装过程中的资产剥离,也就是说,如果您有如下规则。看起来它应该只应用于发布版本,但是,唉,它也适用于调试,并将从视图中删除您的模式文件。

buildTypes {

  debug {...}

  release {
    aaptOptions {
      ignoreAssetsPattern '!*.json'
    }
  }
}
 类似资料:
  • 这个问题是在我决定将另一个实体添加到房间数据库之后出现的。架构正在预期目录中导出。所有的建筑。gradle设置已完成,似乎正在工作,但没有。自从我得到: 事实上,两个json模式都已生成,但测试运行程序无法找到此类文件。以下是gradle设置: 因此,很明显gradle插件所做的事情与iSpect或文档中所说的有所不同,但事实并非如此。

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

  • 如果根文件夹项目中的文件夹, 示例: 我想重组我的文件夹,所以我创建一个新的文件夹叫做src,然后我创建一个子文件夹叫做assets,然后把我的图标放在那里 示例: 这是我在app.js文件中的代码 错误消息:这些文件都不存在 *注意:我已经检查了一遍以确保我没有打错字

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

  • 我试图使用位于src/test/resources下的文件进行单元测试,但当我试图读取它时,我不能总是获得空指针。 我使用Spring Boot 2.0.2,JDK 10和Gradle。 我尝试了谷歌搜索问题时发现的许多代码变体,但没有成功。 我的身材。gradle看起来像这样: 我的测试是这些测试的一些变体(我尝试过的任何测试都没有成功): 测试课程如下: src\test\java\com\m

  • 问题内容: 我在 项目根文件夹中* 有 hibernate.cfg.xml 文件。 * 如果我运行的应用程序包含: 它在方法中崩溃并显示以下消息: 无法找到cfg.xml资源[hibernate.cfg.xml] 输出 : 问题答案: 该 hibernate.cfg.xml的 文件应该被移动到 SRC 文件夹中。