現在、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/<package_name>.Java
_の下にあります
したがって、私は実行します
final InputStream resourceAsStream = this.getClass().getResourceAsStream("assets/file.xml");
残念ながら、私はnullを返します。何が悪いのですか?
物事を回転させるには、gradleファイルに以下を追加する必要があります。
_task copyTestResources(type: Copy) {
from "${projectDir}/src/test/resources"
into "${buildDir}/classes/test"
}
processTestResources.dependsOn copyTestResources
_
基本的には、this.getClass().getClassLoader().getResourceAsStream(".")
が_src/test/resource
_を指すため、_build/classes/test
_ディレクトリ内のすべてのファイルを_build/classes/test
_にコピーします。
issue はすでにGoogleに認識されており、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プロジェクトは_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"));
私のために働く。
グーグルを指摘してくれてありがとう issue 私はこれを一日中探していました...
「Android Studio 1.1 RC 1」(gradle build tool 1.1.0-rc1)では、gradleファイルに回避策を追加する必要はありませんが、gradleタスクメニュー(またはコマンドプロンプト)からテストを実行する必要があります!
これは私のために働きました(3年後、gradle 4.10)
subprojects {
junitPlatformTest.dependsOn processTestResources
}