В Maven lifecycle нет конкретной фазы, которая соответствует предварительному и послетестовому испытанию. Это связано с тем, что модульные тесты не требуют внешней среды. Похоже, что вы хотите сделать не модульные тесты, а тесты интеграции, потому что они требуют настройки среды.
От docs:
test
- проверить скомпилированный исходный код, используя подходящие рамки модульного тестирования. Эти тесты не должен требовать кода быть упакованы или размещены
integration-test
- процесс и развернуть пакет, если это необходимо в среду, где интеграционные тесты могут быть запущены
И есть pre-integration-test
, integration-test
и post-integration-test
что используются для настройки, запуска и уничтожения тестовой среды.
pre-integration-test
: выполнить необходимые действия, прежде чем интеграционные тесты выполняются. Это может включать такие вещи, как настройка требуемой среды.
integration-test
: обработать и развернуть пакет, если необходимо, в среду, в которой могут быть выполнены интеграционные тесты.
post-integration-test
: выполнить действия, необходимые после выполнения интеграционных тестов. Это может включать очистку окружающей среды.
Таким образом, было бы проще и намного чище, чтобы сделать это в integration-test
фазе с использованием maven-failsafe-plugin
.
Теперь, если вы действительно хотите запустить, что в качестве модульных тестов, я не написал бы создание/удаление базы данных как плагин Maven. Было бы намного лучше позволить вашему приложению создавать тестовую базу данных, когда она настроена в тестовой среде. (Например, если вы используете Spring, у него есть много возможностей для этого.)
И, если вы действительно хотите запустить, что в качестве модульных тестов в test
фазе, и с помощью плагина, вам придется пропустить выполнение по умолчанию maven-surefire-plugin
, а затем определить выполнение ваших Maven, создавая базу данных, новое выполнение maven-surefire-plugin
и выполнение вашего плагина Maven, отбрасывающего базу данных, связанную с фазой test
.
Это работает, потому что Maven вызывает плагины в порядке as they are defined in the POM, когда они привязаны к одной и той же фазе.
конфигурация будет выглядеть следующим образом:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<id>default-test</id>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId><!-- group id of your plugin --></groupId>
<artifactId><!-- artifact id of your plugin --></artifactId>
<version><!-- version --></version>
<executions>
<execution>
<id>create-db</id>
<phase>test</phase>
<goals>
<goal><!-- your goal --></goal>
</goals>
<!-- add configuration -->
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<id>test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId><!-- group id of your plugin --></groupId>
<artifactId><!-- artifact id of your plugin --></artifactId>
<version><!-- version --></version>
<executions>
<execution>
<id>drop-db</id>
<phase>test</phase>
<goals>
<goal><!-- your goal --></goal>
</goals>
<!-- add configuration -->
</execution>
</executions>
</plugin>
Хотя связывание по умолчанию теста на пустую фазе работы в Maven, IntelliJ помечает его как ошибка, и в моем случае, IntelliJ впоследствии была не в состоянии решить все зависимости импортированных от Maven. Отключение фазы по умолчанию-тест таким образом, вместо того, чтобы: по умолчанию тест <конфигурация> верно конфигурация> –
rob
@rob Да! И это на самом деле чище, как это, спасибо за комментарий! – Tunaki