Nie ma określonej fazy w cyklu życia Maven co odpowiada przed i po teście. Dzieje się tak, ponieważ testy jednostkowe nie powinny wymagać środowiska zewnętrznego. Wygląda na to, że to, co chcesz zrobić, to nie testy jednostkowe, ale testy integracyjne, ponieważ wymagają one skonfigurowania środowiska.
Z dokumentacji :
Jest też pre-integration-test
, integration-test
i post-integration-test
które są używane do konfiguracji, uruchamiania i niszczenia środowiska testowego.
W związku z tym łatwiej i czyściej byłoby to zrobić w integration-test
faza za pomocą maven-failsafe-plugin
.
Teraz, jeśli naprawdę chcesz uruchomić to jako testy jednostkowe, nie napisałbym tworzenia / usuwania bazy danych jako wtyczki Maven. Dużo lepiej byłoby pozwolić aplikacji na tworzenie testowej bazy danych, gdy jest ona skonfigurowana w środowisku testowym. (Na przykład, jeśli używasz Springa, ma do tego wiele udogodnień.)
A jeśli naprawdę chcesz uruchomić to jako testy jednostkowe w test
faza, i używając twojej wtyczki, będziesz musiał pominąć domyślne wykonanie maven-surefire-plugin
a następnie zdefiniuj wykonanie wtyczki Maven tworząc bazę danych, nowe wykonanie maven-surefire-plugin
i wykonanie wtyczki Maven upuszczającej bazę danych, powiązaną z test
faza.
Działa to, ponieważ Maven wywołuje wtyczki w kolejności jako są zdefiniowane w POM kiedy są związane z tą samą fazą.
Konfiguracja wyglądałaby tak:
<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>