Gradle — включение ресурсов в тесты

#android #testing #resources #gradle

#Android #тестирование #Ресурсы #gradle

Вопрос:

У меня есть проект Android gradle и проект java gradle в качестве его зависимости. Во втором есть отдельные классы модульных тестов. Он также содержит ресурсы, размещенные внутри src/main/resources . Проблема в том, что ресурсы не копируются в каталог тестовой сборки.

Я нашел эту тему: http://forums.gradle.org/gradle/topics/resources_from_src_main_resources_not_included_for_test и добавление фрагмента из позапрошлого сообщения приводит к тому, что ресурсы добавляются, и тесты работают нормально, но сборка android APK завершается неудачей из-за дублирования классов. Можно ли изменить исходные наборы условно (только для теста) или, может быть, есть лучший способ включить ресурсы в тесты?

Это упомянутый фрагмент:
sourceSets {
main {
output.resourcesDir = "build/classes/main"
}
}

Комментарии:

1. «Проблема в том, что ресурсы не копируются в каталог тестовой сборки». Какую именно проблему вы пытаетесь решить здесь? Основные ресурсы помещаются в путь к классу выполнения теста.

2. Проблема в том, что ресурсы не найдены, когда я запускаю тест без указанного фрагмента. Для ясности: есть файл по адресу /src/main/resources/<package_name>/ .

3. О каких ресурсах мы говорим и как именно они загружаются? Это должно работать нормально, за исключением нескольких редких случаев (например, JPA).

4.Это текстовый файл /src/main/resources/<package_name>/error_index.properties , который загружается следующим образом: String propertiesFileName = "package_name>/error_index.properties"; ClassLoader cld = ResponseErrorHandler.class.getClassLoader(); InputStream instr = cld.getResourceAsStream(propertiesFileName); это неправильный способ? Проект изначально был создан как проект java maven с использованием netbeans.

5. Отсюда не могу сказать, почему перенастройка sourceSets.main.output.resourcesDir будет иметь значение в этом случае. В чистом Java-проекте этого не должно быть. Возможно, попробуйте установить jar.duplicatesStrategy = DuplicatesStrategy.EXCLUDE .