Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Welche Maven-Phase wird immer nach der Testphase ausgeführt?

Es gibt keine bestimmte Phase im Maven-Lebenszyklus das entspricht Vor- und Nachtest. Dies liegt daran, dass Komponententests keine externe Umgebung erfordern sollen. Es hört sich so an, als ob Sie keine Komponententests, sondern Integrationstests durchführen möchten, da dafür eine Umgebung eingerichtet werden muss.

Aus den Dokumenten :

Und es gibt einen pre-integration-test , integration-test und post-integration-test die verwendet werden, um die Testumgebung einzurichten, auszuführen und zu zerstören.

Daher wäre es einfacher und viel sauberer, dies in integration-test zu tun Phase mit dem maven-failsafe-plugin .

Wenn Sie das jetzt wirklich als Unit-Tests ausführen möchten, würde ich das Erstellen / Löschen der Datenbank nicht als Maven-Plugin schreiben. Es wäre viel besser, Ihre Anwendung die Testdatenbank erstellen zu lassen, wenn sie in einer Testumgebung konfiguriert ist. (Wenn Sie beispielsweise Spring verwenden, bietet es dafür viele Möglichkeiten.)

Und wenn Sie das wirklich als Unit-Tests im test ausführen möchten Phase, und Wenn Sie Ihr Plugin verwenden, müssen Sie die Standardausführung des maven-surefire-plugin überspringen und definieren Sie dann eine Ausführung Ihres Maven-Plugins, das die Datenbank erstellt, eine neue Ausführung des maven-surefire-plugin und eine Ausführung Ihres Maven-Plugins, das die Datenbank löscht, die an den test gebunden ist Phase.

Dies funktioniert, weil Maven die Plugins in der Reihenfolge aufruft sie sind im POM definiert wenn sie an dieselbe Phase gebunden sind.

Eine Konfiguration würde wie folgt aussehen:

<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>