Я хочу добавить интеграционные тесты в свою сборку Gradle (версия 1.0). Они должны запускаться отдельно от моих обычных тестов, потому что они требуют, чтобы веб-приложение было развернуто на локальном хосте (они тестируют это веб-приложение). Тесты должны иметь возможность использовать классы, определенные в моем основном исходном наборе. Как мне этого добиться?
99
java/withIntegrationTests
в полном дистрибутиве Gradle есть образец.Вот как я добился этого без использования
configurations{ }
.Протестировано с использованием: Gradle 1.4 и Gradle 1.6.
источник
java { srcDir 'src/integrationtest/java' } resources { srcDir 'src/integrationtest/resources' }
это не имеет значения , так как он просто redeclaressrc/<sourceSetName>/...
кsrc/integrationtest/...
: здесь: изменение капитала T на более низкую тcompileClasspath += sourceSets.main.runtimeClasspath
объединяет два набора файлов. Обычного разрешения конфликтов для зависимостей нет. Вы можете получить две версии одной и той же библиотеки. В этом поможет расширение конфигураций.Подводя итог обоим старым ответам (получите лучший и минимально жизнеспособный из обоих миров):
Сначала несколько теплых слов:
Во-первых, нам нужно определить
sourceSet
:затем мы расширяем
sourceSet
fromtest
, поэтому мы используемtest.runtimeClasspath
(который включает все зависимости от самогоtest
ANDtest
) в качестве пути к классам для производногоsourceSet
:sourceSets.integrationTest.runtimeClasspath
необходимо, но не должно иметь значения, посколькуruntimeClasspath
всегда расширяетсяoutput + runtimeSourceSet
, не понимайтемы определяем специальную задачу для запуска интеграционных тестов:
Настройте
integrationTest
тестовые классы и пути к классам. По умолчанию изjava
плагина используетсяtest
sourceSet
(необязательно) автоматический запуск после теста
(необязательно) добавить зависимость от
check
(чтобы он всегда запускался при выполненииbuild
илиcheck
)(необязательно) добавьте java, ресурсы для
sourceSet
поддержки автоопределения и создайте эти «частичные данные» в вашей среде IDE. т.е. IntelliJ IDEA будет автоматически создаватьsourceSet
каталоги java и ресурсы для каждого набора, если он не существует:tl; dr
ссылаясь на:
К сожалению, пример кода на github.com/gradle/gradle/subprojects/docs/src/samples/java/customizedLayout/build.gradle или … / gradle /… / withIntegrationTests / build.gradle, похоже, не справляется с этим или имеет другой / более сложный / для меня все равно нет более ясного решения!
источник
compileTestJava
classesDir
был перенесенclassesDirs
на Gradle 5Туманность фасетки плагина устраняет шаблонный:
В частности, для интеграционных тестов, даже если это сделано за вас , просто примените:
Ссылки на портал плагинов Gradle для каждого из них:
источник
Если вы используете
Чтобы заставить IntelliJ распознавать настраиваемый исходный набор как корень тестовых источников:
источник
Вот что у меня работает с Gradle 4.0.
Начиная с версии 4.0, Gradle теперь использует отдельные каталоги классов для каждого языка в исходном наборе. Поэтому, если ваш сценарий сборки использует
sourceSets.integrationTest.output.classesDir
, вы увидите следующее предупреждение об устаревании.Чтобы избавиться от этого предупреждения, просто переключитесь на
sourceSets.integrationTest.output.classesDirs
. Для получения дополнительной информации см. Примечания к выпуску Gradle 4.0 .источник
Я новичок в Gradle, использую Gradle 6.0.1 JUnit 4.12. Вот что я придумал для решения этой проблемы.
Обратите внимание, что основной источник и тестовый источник упоминаются отдельно, один под
main
и один подtest
.testImplementation
Пункт подdependencies
используется только для компиляции исходного вtest
. Если ваш основной код действительно зависит от JUnit, вы также должны указать вimplementation
разделеdependencies
.Мне пришлось указать
repositories
раздел, чтобы заставить это работать, я сомневаюсь, что это лучший / единственный способ.источник