Файл доступа в тесте JUnit в среде Gradle
Сейчас у меня есть библиотека 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");
К сожалению, я возвращаюсь обратно. Что я делаю неправильно?
Ответы
Ответ 1
Чтобы ускорить работу, вам нужно добавить в файл 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
.
issue уже известен Google, и они хотят исправить его в Android Studio 1.2 (так как для этого нужен IntelliJ14, и похоже, что это будет включен в Android Studio 1.2)
Ответ 2
Попробуйте разместить file.xml
под src/test/resources
и использовать this.getClass().getResourceAsStream("file.xml")
(без префикса папки)
Проблема заключается в том, что папка assets
не является частью пути к тестовой среде выполнения, поэтому this.getClass().getResourceAsStream("assets/file.xml")
не сможет разрешить путь, как вы ожидали.
По умолчанию папка тестовых ресурсов в проекте java Gradle имеет значение src/test/resources
(то же, что и проект Maven java). Вы можете переопределить его в папку assets
, если хотите, добавив это в файл проекта build.gradle
:
sourceSets.test {
resources.srcDirs = ["src/test/assets"]
}
Ответ 3
В build.gradle
добавьте это:
sourceSets.test {
resources.srcDirs = ["src/test"]
}
В своем коде, обратитесь к вашему ресурсу следующим образом:
getClass().getClassLoader().getResourceAsStream("assets/file.xml"));
Работает для меня.
Ответ 4
Спасибо за указание Google issue Я искал весь день для этого...
В "Android Studio 1.1 RC 1" (gradle инструмент сборки 1.1.0-rc1) нет необходимости добавлять работу в файл gradle, но вы должны выполнить тест из gradle меню задач (или командной строки)!