2016-02-22 5 views
2

Я реализовал плагин Maven, который используется для создания тестовой базы данных (со случайным именем) перед фазой Maven test и сбрасывает эту базу данных при завершении фазы test.Какая фаза maven будет всегда выполняться после этапа тестирования?

Плагин необходимо выполнить два раза, перед фазой test (когда используется для создания базы данных) и после фазы test (когда используется для сброса этой тестовой базы данных).

Какая фаза жизненного цикла Maven будет всегда выполняться после этапа тестирования, успешно ли выполнена фаза test или нет?

ответ

3

В 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> 
+0

Хотя связывание по умолчанию теста на пустую фазе работы в Maven, IntelliJ помечает его как ошибка, и в моем случае, IntelliJ впоследствии была не в состоянии решить все зависимости импортированных от Maven. Отключение фазы по умолчанию-тест таким образом, вместо того, чтобы: по умолчанию тест <конфигурация> верно rob

+1

@rob Да! И это на самом деле чище, как это, спасибо за комментарий! – Tunaki

Смежные вопросы