В Maven можно ли проводить тесты интеграции в отдельной папке с модульных тестов?

На странице Maven и Integration Testing говорится:

В будущем слухи о том, что будущая версия Maven будет поддерживать что-то вроде src/it/java на этапе интеграции-тестирования, кроме того на src/test/java на этапе тестирования.

но это было в 2011-12-11 годах. Это еще не произошло?

В этот ответ - "Запустить тест maven не в папку src/test/java по умолчанию" упоминает установку <testSourceDirectory>, это их способ сделать это только для теста интеграции (т.е. фазы integration-test)?

Я ищу использовать плагин Maven FailSafe и не переименовывать кучу интеграционных тестов или использовать еще экспериментальный JUnit @Categories.

Ответ 1

Вы можете поместить IT's в другую папку следующим образом:

.
|-- pom.xml
`-- src
    |-- it
    |   `-- java
    |       `-- com
    |           `-- soebes
    |               `-- maui
    |                   `-- it
    |                       `-- BitMaskIT.java
    |-- main
    |   `-- java
    |       `-- com
    |           `-- soebes
    |               `-- maui
    |                   `-- it
    |                       `-- BitMask.java
    `-- test
        `-- java
            `-- com
                `-- soebes
                    `-- maui
                        `-- it
                            `-- BitMaskTest.java

Для создания папок, известных компилятору и т.д., необходимо следующее.

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.5</version>
  <executions>
    <execution>
      <id>add-test-source</id>
      <phase>process-resources</phase>
      <goals>
        <goal>add-test-source</goal>
      </goals>
      <configuration>
        <sources>
          <source>src/it/java</source>
        </sources>
      </configuration>
    </execution>
  </executions>
</plugin>

Для реального запуска ИТ необходимо следующее:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.15</version>
  <executions>
    <execution>
      <id>integration-test</id>
      <goals>
        <goal>integration-test</goal>
      </goals>
    </execution>
    <execution>
      <id>verify</id>
      <goals>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Это означает, что вы можете иметь интеграцию в одном и том же модуле, который имеет тот недостаток, что выполнение интеграционных тестов использует те же ресурсы, что и модульные тесты. Лучшим решением было бы создать отдельный модуль maven, в котором вы можете поместить тесты интеграции в обычную папку src/test/java и т.д. И настроить только maven-отказоустойчивый плагин.