在 Gradle 环境中的 JUnit 测试中访问文件

2022-09-02 12:26:21

现在我有一个Java库,它有一个测试类。在该类中,我想访问位于硬盘上的一些文件。

build.gradle 看起来像这样:

apply plugin: 'java'

dependencies {
    testCompile 'junit:junit:4.11'
}

我的文件在下方,Java 类在java_lib/src/test/assets/file.xmljava_lib/src/test/java/<package_name>.java

因此,我执行

final InputStream resourceAsStream = this.getClass().getResourceAsStream("assets/file.xml");

不幸的是,我得到空值。我做错了什么?


答案 1

要滚动,您需要将以下内容添加到 gradle 文件中:

task copyTestResources(type: Copy) {
    from "${projectDir}/src/test/resources"
    into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources

它基本上所做的是将目录中的所有文件复制到 ,因为指向 。src/test/resourcebuild/classes/testthis.getClass().getClassLoader().getResourceAsStream(".")build/classes/test

谷歌已经知道这个问题,他们想在Android Studio 1.2中修复它(因为他们需要IntelliJ14,而且似乎它将包含在Android Studio 1.2中)


答案 2

尝试放在下面并使用(不带文件夹前缀)file.xmlsrc/test/resourcesthis.getClass().getResourceAsStream("file.xml")

问题似乎是该文件夹不是测试运行时类路径的一部分,因此无法按预期解析该路径。assetsthis.getClass().getResourceAsStream("assets/file.xml")

默认情况下,Gradle java 项目中的测试资源文件夹是(与 Maven java 项目相同)。如果您愿意,可以通过在项目文件中添加以下内容来将其覆盖到文件夹中:src/test/resourcesassetsbuild.gradle

sourceSets.test {
    resources.srcDirs = ["src/test/assets"]
}

推荐