Как добавить другую исходную папку теста в Maven и скомпилировать ее в отдельную папку?
у меня есть значение по умолчанию src/test/java
папка для наших модульных тестов. Отдельная папка src/integration/java
доступно для интеграционных тестов.
Я настроил maven-surefire-plugin
для выполнения модульных / интеграционных тестов на соответствующих этапах. Это отлично работает, когда скомпилированные классы находятся в правильном каталоге. К сожалению, Maven поддерживает только одну исходную папку теста и одну выходную папку теста.
с плагином mavens build-helper я мог бы добавить еще одну папку test-source, но скомпилированные классы будут сгенерированы в test-classes
но я хочу, чтобы скомпилировать классы src/integration/java
на target/integration-test-classes
. Возможно ли это?
src/test/java > target/test-classes
src/integration/java > target/integration-test-classes
PS: мне не нравится это исключение / включение в пакет базового решения (исключить все **/it/**
файлы из фазы тестирования по умолчанию, и исключить все **/unit/**
от этапа интеграции.
3 ответов
извините, нет никакого способа сделать это, имхо даже с некоторым взломом в виду. Концепция заключается в том, что существует только один целевой каталог для скомпилированных классов и один для скомпилированных тестовых классов (даже <build>
схема тегов предоставляет это). Честно говоря, я не думаю, что это возможно с Maven. Maven повышает прямую, чистую и разборчивую конструкцию вашего применения, путем использование хорошо произведенных модулей.
Если думаете, что вы действительно хотите сделать, это создать интеграционные тесты модуль. На самом деле это обычная практика. До сих пор у меня всегда был отдельный модуль тестирования интеграции и никогда не было проблем с этим. Конечно, вы должны зависеть от всех необходимых модулей для выполнения этих тестов. Вы даже можете зависеть от тестовых классов другого модуля, используя <type>test-jar</type>
с объявлением зависимости, как указано здесь:
http://maven.apache.org/guides/mini/guide-attached-tests.html
мне не нравится этот метод, и, как правило, предпочитают имейте отдельный модуль с поддержкой тестирования, например, базовые классы для тестовых случаев JUnit и т. д.
на основе того, что вы написали, похоже, что вы неправильно назвали свои интеграционные тесты и не использовали maven-отказоустойчивый-плагин для интеграционных тестов. На основе конвенции maven-отказоустойчивый-плагин вы должны назвать свои интеграционные тесты, как *IT.java
. Если вы назвали свои интеграционные тесты соответствующим образом, вы можете справиться с этим с более или менее такой конфигурацией:
<project ...>
[...]
<build>
[...]
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/integration/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
[...]
</build>
[...]
</project>
с вышеуказанным возможно держать интеграционные тесты в рамках одного модуля. Но это не решит проблему наличия скомпилированных классов интеграционных тестов в отдельной папке.
иногда лучше иметь отдельный модуль интеграционного теста, который содержит только интеграционные тесты (что приводит к созданию многомодульной сборки).
Если вы хотите оставить соглашения Maven, вы можете попробовать настроить maven-compiler-plugin для использования другого выходного пути (например. target/integration-tests/classes
), что не думаю, что будет на самом деле работа.
Если вы хотите изменить только исходную папку модульного теста (а не добавить дополнительную), просто измените testSourceDirectory
элемент:
<build>
<testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
это полезно, если все ваши модульные тесты написаны в groovy. (Но вам также нужно будет настроить maven для компиляции вашего кода groovy - см. groovy-eclipse-maven-плагин или build-helper-maven-плагин.)