web-dev-qa-db-ja.com

Gradle環境の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/<package_name>.Java_の下にあります

したがって、私は実行します

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

残念ながら、私はnullを返します。何が悪いのですか?

15
Niklas

物事を回転させるには、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)

15
Niklas

_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"]
}
_
7
Invisible Arrow

build.gradle、 これを追加 :

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

コードで、次のようにリソースにアクセスします。

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

私のために働く。

3
ToYonos

グーグルを指摘してくれてありがとう issue 私はこれを一日中探していました...

「Android Studio 1.1 RC 1」(gradle build tool 1.1.0-rc1)では、gradleファイルに回避策を追加する必要はありませんが、gradleタスクメニュー(またはコマンドプロンプト)からテストを実行する必要があります!

0
Thorre

これは私のために働きました(3年後、gradle 4.10)

subprojects {   
  junitPlatformTest.dependsOn processTestResources
}
0
DALDEI