Использование плагина 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>
Или что-то в этом роде?