Mysql
 sql >> Database >  >> RDS >> Mysql

Quale fase Maven verrà sempre eseguita dopo la fase di test?

Non ci sono fasi particolari nel ciclo di vita Maven che corrisponde al pre e post-test. Questo perché gli unit test non dovrebbero richiedere un ambiente esterno. Sembra che quello che vuoi fare non siano unit test ma test di integrazione, perché richiedono la configurazione di un ambiente.

Dai documenti :

E c'è un pre-integration-test , integration-test e post-integration-test utilizzati per configurare, eseguire e distruggere l'ambiente di test.

In quanto tale, sarebbe più facile e molto più pulito farlo in integration-test fase utilizzando il maven-failsafe-plugin .

Ora, se vuoi davvero eseguirlo come unit test, non scriverei la creazione / eliminazione del database come plug-in Maven. Sarebbe molto meglio lasciare che la tua applicazione crei il database di test quando è configurato in un ambiente di test. (Ad esempio, se stai usando Spring, ha molte strutture per questo.)

E, se vuoi davvero eseguirlo come unit test nel test fase, e usando il tuo plugin, dovrai saltare l'esecuzione predefinita del maven-surefire-plugin e quindi definisci un'esecuzione del tuo plugin Maven creando il database, una nuova esecuzione del maven-surefire-plugin e un'esecuzione del tuo plugin Maven che elimina il database, legato al test fase.

Funziona perché Maven richiama i plug-in nell'ordine come sono definiti nel POM quando sono legati alla stessa fase.

Una configurazione sarebbe simile a:

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