Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual fase do maven será sempre executada após a fase de teste?


Não há uma fase específica no ciclo de vida do Maven que corresponde ao pré e pós-teste. Isso ocorre porque os testes de unidade não devem exigir um ambiente externo. Parece que o que você quer fazer não são testes de unidade, mas testes de integração, porque eles exigem que um ambiente seja configurado.

Dos documentos :

E há um pre-integration-test , integration-test e post-integration-test que são usados ​​para configurar, executar e destruir o ambiente de teste.

Como tal, seria mais fácil e muito mais limpo fazer isso em integration-test fase usando o maven-failsafe-plugin .

Agora, se você realmente deseja executar isso como testes de unidade, eu não escreveria a criação/exclusão do banco de dados como um plugin Maven. Seria muito melhor deixar seu aplicativo criar o banco de dados de teste quando estiver configurado em um ambiente de teste. (Por exemplo, se você estiver usando o Spring, ele tem muitos recursos para isso.)

E, se você realmente deseja executar isso como testes de unidade no test fase, e usando seu plugin, você terá que pular a execução padrão do maven-surefire-plugin e então defina uma execução do seu plugin Maven criando o banco de dados, uma nova execução do maven-surefire-plugin e uma execução do seu plugin Maven descartando o banco de dados, vinculado ao test Estágio.

Isso funciona porque o Maven invoca os plugins na ordem como eles são definidos no POM quando eles estão vinculados à mesma fase.

Uma configuração ficaria assim:
<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>