Nik*_*las 15 java junit android
现在我有一个拥有测试类的Java库.在那个课程中,我想访问位于我硬盘上的一些文件.
build.gradle看起来像这样:
apply plugin: 'java'
dependencies {
testCompile 'junit:junit:4.11'
}
Run Code Online (Sandbox Code Playgroud)
我的文件在java_lib/src/test/assets/file.xml,Java类在java_lib/src/test/java/<package_name>.java
因此我执行
final InputStream resourceAsStream = this.getClass().getResourceAsStream("assets/file.xml");
不幸的是我回来了.我究竟做错了什么?
Nik*_*las 15
要使事情滚动,您需要将以下内容添加到gradle文件中:
task copyTestResources(type: Copy) {
from "${projectDir}/src/test/resources"
into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources
Run Code Online (Sandbox Code Playgroud)
它通常做的是复制的所有文件src/test/resource目录build/classes/test,因为this.getClass().getClassLoader().getResourceAsStream(".")点build/classes/test.
谷歌已经知道这个问题,他们希望在Android Studio 1.2中修复它(因为他们需要IntelliJ14,看起来它将包含在Android Studio 1.2中)
试着将file.xml下src/test/resources和使用this.getClass().getResourceAsStream("file.xml")(不带文件夹前缀)
问题似乎是该assets文件夹不是测试运行时类路径的一部分,因此this.getClass().getResourceAsStream("assets/file.xml")无法按预期解析路径.
默认情况下,Gradle java项目中的test资源文件夹src/test/resources(与Maven java项目相同).assets如果您愿意,可以通过在项目build.gradle文件中添加它来将其覆盖到文件夹:
sourceSets.test {
resources.srcDirs = ["src/test/assets"]
}
Run Code Online (Sandbox Code Playgroud)
在build.gradle,添加这个:
sourceSets.test {
resources.srcDirs = ["src/test"]
}
Run Code Online (Sandbox Code Playgroud)
在您的代码中,像这样访问您的资源:
getClass().getClassLoader().getResourceAsStream("assets/file.xml"));
Run Code Online (Sandbox Code Playgroud)
为我工作。
| 归档时间: |
|
| 查看次数: |
15698 次 |
| 最近记录: |