Java Gradle环境下JUnit测试中的访问文件
现在我有一个Java库,它有一个测试类。在那个课程中,我想访问硬盘上的一些文件 build.gradle如下所示: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
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
}