Использование плагина 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?

Ссылка:

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

person kevinarpe    schedule 19.12.2013    source источник


Ответы (3)


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

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

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

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

person maheshsenni    schedule 19.12.2013

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

<include>**/*Test.java</include>
person Evgeniy Dorofeev    schedule 19.12.2013

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

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

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

person EdH    schedule 19.12.2013