Использование плагина Maven surefire для включения тестов

Я использую Maven для создания моего проекта. В настоящее время я разделяю тестирование на разные иерархии:

  • Модульные тесты → src/test/java/**/*Test.java
  • Интеграционные тесты → src/test-integration/java/**/*Test.java
  • Внешние тесты → src/test-external/java/**/*Test.java

Вот мой раздел maven-surefire-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>${maven-surefire-plugin.version}</version>
    <configuration>
        <includes>
            <include>src/test/java/**/*Test.java</include>
        </includes>
    </configuration>
</plugin>

Указанная директива <include> не работает. При запуске тестов не выполняется: mvn clean test

Я попробовал **/*Test.java, и он запускает все тесты - блок, интеграцию и внешний. Тем не менее, для набора тестов по умолчанию я хочу только запустить модульные тесты.

Как я могу сделать эту работу в Maven?

Ref:

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>

Ответ 1

Вы должны разделить свои устройства и тесты интеграции. Модульные тесты могут запускаться с использованием плагина Surefire, и для запуска интеграционных тестов есть отдельный плагин под названием Failsafe.

Плагин Surefire по умолчанию запускает все тестовые файлы, чье имя заканчивается на *Test.java. Трюк состоит в том, чтобы назвать ваши тестовые файлы интеграции с другим именем, например *IT.java. Failsafe plugin идентифицирует их как интеграционные тесты.

Вы можете найти пример использования в этом ответе - Как получить тесты Maven Integration для запуска

Также вам не нужно отдельно настраивать плагин Surefire, если вы следуете настройкам по умолчанию, например, поместите файлы тестовых файлов в папку src/test/java и назовите тестовые файлы как *Test.java.

Ответ 2

Это связано с тем, что путь <include> относительно <testSourceDirectory>, который по умолчанию равен ${project.build.testSourceDirectory}= src/test/java. Попробуйте это

<include>**/*Test.java</include>

Ответ 3

Было бы проще использовать исключение, а не включение?

<excludes>
    <exclude>test-integration/**/*</exclude>
    <exclude>test-external/**/*</exclude>
</excludes>

Или что-то в этом роде?