Вопрос по maven, java – Как добавить еще одну тестовую исходную папку в Maven и скомпилировать ее в отдельную папку?

32

У меня есть дефолт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/** от фазы интеграции.

Переместите ваши интеграционные тесты в отдельный модуль maven. Thorbjørn Ravn Andersen

Ваш Ответ

3   ответа
10

у нас нет способа сделать это, ИМХО даже с некоторым взломом. Концепция состоит в том, что существует только один целевой каталог для скомпилированных классов и один для скомпилированных тестовых классов (даже<build> схема тега разоблачает это). Честно говоря, я не думаю, что это возможно с Maven. Maven продвигает прямой, чистый и разборчивый дизайн вашего приложения, используя хорошо продуманные модули.

Если вы думаете, что вы действительно хотите сделать, это на самом деле создать модуль интеграционных тестов. На самом деле это обычная практика. До сих пор у меня всегда был отдельный модуль тестирования интеграции, и у меня никогда не было проблем с этим. Конечно, вы должны зависеть от всех необходимых модулей для запуска этих тестов. Вы даже можете зависеть от тестовых классов других модулей, используя<type>test-jar</type> с вашей декларацией зависимости, как упомянуто здесь:

http://maven.apache.org/guides/mini/guide-attached-tests.html

Однако этот метод мне не нравится, и обычно я предпочитаю иметь отдельный модуль с вспомогательными средствами тестирования, такими как базовые классы для тестовых случаев JUnit и т. Д.

7

обавить дополнительную), просто изменитеtestSourceDirectory элемент:

<build>
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>

Это полезно, если все ваши юнит-тесты написаны на Groovy. (Но вам также потребуется настроить maven для компиляции вашего отличного кода - см.заводной-затмение-Maven-плагин илиСтроить-хелперы-Maven-плагин.)

35

что вы написали, это звучит так, как будто вы неправильно назвали свои интеграционные тесты, и вы не использовали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) которые не думают, что это действительно сработает.

Error: User Rate Limit Exceeded<phase>validate</phase>.
Error: User Rate Limit Exceededgithub.com/alimate/maven-source-sets

Похожие вопросы