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

Java Gradle环境下JUnit测试中的访问文件,java,android,junit,Java,Android,Junit,现在我有一个Java库,它有一个测试类。在那个课程中,我想访问硬盘上的一些文件 build.gradle如下所示: apply plugin: 'java' dependencies { testCompile 'junit:junit:4.11' } 我的文件在java_-lib/src/test/assets/file.xml下,java类在java_-lib/src/test/java/.java下 因此我执行 final InputStream resourceAsStrea

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

build.gradle如下所示:

apply plugin: 'java'

dependencies {
    testCompile 'junit:junit:4.11'
}
我的文件在
java_-lib/src/test/assets/file.xml下,java类在
java_-lib/src/test/java/.java下

因此我执行

final InputStream resourceAsStream=this.getClass().getResourceAsStream(“assets/file.xml”)


不幸的是我回来了。我做错了什么?

尝试将
file.xml
放在
src/test/resources
下,并使用
this.getClass().getResourceAsStream(“file.xml”)
(不带文件夹前缀)

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

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

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

build.gradle
中,添加以下内容:

sourceSets.test {
    resources.srcDirs = ["src/test"]
}
在代码中,按如下方式访问资源:

getClass().getClassLoader().getResourceAsStream("assets/file.xml"));

对我来说很有用。

要使事情顺利进行,您需要将以下内容添加到gradle文件中:

task copyTestResources(type: Copy) {
    from "${projectDir}/src/test/resources"
    into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources
它基本上是将
src/test/resource
目录中的所有文件复制到
build/classes/test
,因为
this.getClass().getClassLoader().getResourceAsStream(“.”
指向
build/classes/test


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

感谢您指出我整天都在寻找的谷歌

在“Android Studio 1.1 RC 1”(gradle构建工具1.1.0-rc1)中,无需向gradle文件添加变通方法,但您必须从gradle任务菜单(或命令提示符)执行测试

这对我很有效(3年后,gradle 4.10)


不适合我。我仍然从
getResourceAsStream
中得到空值,今天晚些时候或明天
this.getClass().getClassLoader().getResource(“.”)返回
//build/classes/test/
。所以这对我来说不是很有效。但是资产文件夹不在这个文件夹中吗?它是,但它不是
src/test/assets
下的文件夹。这个文件夹(资源文件夹)在编译过程中被复制到这里,它是同一个资产文件夹,它应该包含文件。xml@RodrigoQuesada可以是,我仍在使用此代码段,因为我不想依赖此“可以修复”,然后在下一个版本中它不再工作。我得到
在项目上找不到属性“processTestResources”
。您在项目上应用了哪个插件?
subprojects {   
  junitPlatformTest.dependsOn processTestResources
}