Как запустить интеграционные тесты Maven
у меня есть многомодульный проект maven2, и в каждом из моих дочерних модулей у меня есть тесты JUnit, которые называются Test.java
и Integration.java
для юнит-тестов и интеграционных тестов соответственно. Когда я исполняю:
mvn test
все тесты JUnit *Test.java
внутри дочерних модулей выполняются. Когда я выполняю
mvn test -Dtest=**/*Integration
нет Integration.java
тесты get выполняются в дочерних модулях.
это похоже на то же самое прикажи мне, но тому, у кого -Dtest=/*интеграция** не работает он отображает 0 тестов, выполняемых на родительском уровне, которых нет никаких тестов
8 ответов
вы можете настроить maven Surefire для запуска модульных тестов и интеграционных тестов отдельно. На этапе стандартного модульного теста выполняется все, что не соответствует шаблону интеграционного теста. Ты тогда создать второй этап тестирования это работает только интеграционные тесты.
вот пример:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
на жизненный цикл сборки Maven теперь включает этап " интеграция-тест "для выполнения интеграционных тестов, которые выполняются отдельно от модульных тестов, выполняемых на этапе" тест". Он запускается после "пакета", поэтому, если вы запустите" mvn verify"," mvn install "или" mvn deploy", интеграционные тесты будут выполняться по пути.
по умолчанию integration-test запускает тестовые классы с именем **/IT*.java
, **/*IT.java
и **/*ITCase.java
, но это можно настроить.
подробнее о том, как чтобы подключить все это, см. безотказный плагин, the безотказного использования страницы (неправильно связан с предыдущей страницы, как я пишу это), а также проверить этот Sonatype блог сообщение.
Я сделал именно то, что вы хотите сделать, и он отлично работает. Модульные тесты" * Тесты "всегда выполняются, а" * IntegrationTests " выполняется только при проверке mvn или установке mvn. Вот это фрагмент из моего ПОМА. serg10 почти был прав....но не совсем.
<plugin>
<!-- Separates the unit tests from the integration tests. -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Skip the default running of this plug-in (or everything is run twice...see below) -->
<skip>true</skip>
<!-- Show 100% of the lines from the stack trace (doesn't work) -->
<trimStackTrace>false</trimStackTrace>
</configuration>
<executions>
<execution>
<id>unit-tests</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<!-- Never skip running the tests when the test phase is invoked -->
<skip>false</skip>
<includes>
<!-- Include unit tests within integration-test phase. -->
<include>**/*Tests.java</include>
</includes>
<excludes>
<!-- Exclude integration tests within (unit) test phase. -->
<exclude>**/*IntegrationTests.java</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<!-- Never skip running the tests when the integration-test phase is invoked -->
<skip>false</skip>
<includes>
<!-- Include integration tests within integration-test phase. -->
<include>**/*IntegrationTests.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
удачи!
вы можете разделить их очень легко, используя категории JUnit и Maven.
Это показано очень, очень кратко ниже, разделяя модульные и интеграционные тесты.
Определите Интерфейс Маркера
Первым шагом при группировании теста с использованием категорий является создание интерфейса маркера.
Этот интерфейс будет использоваться для пометки всех тестов, которые вы хотите запустить как интеграционные тесты.
public interface IntegrationTest {}
пометить тестовые классы
добавьте аннотацию категории в верхнюю часть тестового класса. Он принимает имя вашего нового интерфейса.
import org.junit.experimental.categories.Category;
@Category(IntegrationTest.class)
public class ExampleIntegrationTest{
@Test
public void longRunningServiceTest() throws Exception {
}
}
Настройка Модульных Тестов Maven
Красота этого решения заключается в том, что ничего не меняется для юнит-теста.
Мы просто добавляем некоторую конфигурацию к плагину maven surefire, чтобы он игнорировал любые интеграционные тесты.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>
com.test.annotation.type.IntegrationTest
</excludedGroups>
</configuration>
</plugin>
когда вы делаете чистый тест mvn только ваши немаркированные модульные тесты будут работать.
Настройка Интеграционных Тестов Maven
Опять же конфигурация для этого очень проста.
Мы используем стандартный плагин failsafe и настраиваем его только для запуска интеграционных тестов.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<groups>
com.test.annotation.type.IntegrationTest
</groups>
</configuration>
</plugin>
конфигурация использует стандартную цель выполнения для запуска отказоустойчивого плагина на этапе тестирования интеграции сборки.
теперь вы можете сделать mvn clean установить
На этот раз, как и при выполнении модульных тестов, интеграционные тесты выполняются на этапе интеграционных тестов.
вы должны попробовать использовать Мэйвен безотказный плагин. Вы можете сказать, чтобы он включал определенный набор тестов.
по умолчанию Maven выполняет только тесты, которые имеют тест где-то в имени класса.
переименовать в IntegrationTest и это может сработать.
в качестве альтернативы вы можете изменить конфигурацию Maven, чтобы включить этот файл, но, вероятно, проще и лучше просто назвать свои тесты SomethingTest.
с включения и исключения из испытания:
по умолчанию плагин Surefire будет автоматически включать все тестовые классы со следующими шаблонами подстановочных знаков:
- "**/тест*.java " - включает в себя все его подкаталоги и все java имена файлов, которые начинаются с "Test".
- "**/*тест.java " - включает в себя все его подкаталоги и все java имена файлов, которые заканчиваются на "Test".
- " * * / * TestCase.java " - включает в себя все его подкаталоги и все java имена файлов, которые заканчиваются на "TestCase".
Если тестовые классы не идут с название соглашение, затем настроить Плагин Surefire и укажите тесты вы хотите включить.
другой способ запуска интеграционных тестов с Maven-использовать функцию профиля:
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>integration-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
<excludes>
<exclude>**/*StagingIntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
...
под управлением 'команды mvn чистой установки' будет работать по умолчанию. Как указано выше, интеграционные тесты будут игнорироваться. Бег!--4--> 'mvn clean install-P integration-tests' будет включать интеграционные тесты (я также игнорирую свои промежуточные интеграционные тесты). Кроме того, у меня есть сервер CI, который запускает мои интеграционные тесты каждую ночь, и для этого я выпускаю команда 'mvn test-P integration-tests'.
вы можете следовать документация maven для запуска модульных тестов со сборкой и выполнения интеграционных тестов отдельно.
<project>
<properties>
<skipTests>true</skipTests>
</properties>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.20.1</version>
<configuration>
<skipITs>${skipTests}</skipITs>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
Это позволит вам работать со всеми интеграционными тестами отключены по умолчанию. Чтобы запустить их, используйте следующую команду:
mvn install -DskipTests=false