Teste de integração com o plug-in Maven Cargo
Uma necessidade muito comum no ciclo de vida de um projeto é configurar o teste de integração. Felizmente, o Maven tem suporte integrado para este cenário exato, com as seguintes fases do ciclo de vida de construção padrão (do Mavendocumentation): [more-134] #
-
pre-integration-test:Perform actions required before integration tests are executed. This may involve things such as setting up the required environment.
-
integration-test:Process and deploy the package if necessary into an environment where integration tests can be run.
-
post-integration-test:Perform actions required after integration tests have been executed. This may including cleaning up the environment.
Primeiro, omaven-surefire-plugin é configurado de forma queintegration tests are excluded do ciclo de vida de construção padrão:
org.apache.maven.plugins
maven-surefire-plugin
2.17
**/*IntegrationTest.java
Exclusions são feitos por meio de expressões de caminho no estilo ant, portanto, todos os testes de integração devem seguir esse padrão e terminar com“IntegrationTest.java “.
Em seguida, ocargo-maven2-plugin é usado, já queCargo vem com suporte de primeira linha para servidores da Web incorporados. Obviamente, se o ambiente do servidor exigir configuração específica, a carga também saberá como construir o servidor a partir de um pacote arquivado, bem como implantar em um servidor externo.
org.codehaus.cargo
cargo-maven2-plugin
1.4.8
jetty8x
embedded
8080
Um servidor da Web incorporado Jetty 8 é definido, escutando na porta 8080.
Na versão mais recente do cargo (1.1.0 para cima), o valor padrão dethe wait flag foi alterado parafalse, paracargo:start. Esse objetivo deve ser usado apenas para executar testes de integração e está vinculado ao ciclo de vida do Maven; para desenvolvimento, a metacargo:run deve ser executada - que temwait=true.
Para que a fase de mavenpackage gere um arquivodeployable war, o empacotamento do projeto deve ser:<packaging>war</packaging>.
Em seguida, um novointegrationMaven profile é criado para permitir a execução dos testes de integraçãoonly quando este perfil está ativo, e não como parte do ciclo de vida de construção padrão.
integration
...
É esse perfil que conterá toda a configuração restante.
Agora, o servidor Jetty está configurado parastart na fasepre-integration-testestop na fasepost-integration-test.
org.codehaus.cargo
cargo-maven2-plugin
false
start-server
pre-integration-test
start
stop-server
post-integration-test
stop
Isso garante que a metacargo:start e as metascargo:stop serão executadas antes e depois da faseintegration-test. Observe que, como há duas definiçõesexecution individuais, o elementoid deve estar presente (e diferente) em ambas, para que o Maven possa aceitar a configuração.
Em seguida, a configuração demaven-surefire-plugin precisa ser substituída dentro do perfilintegration, de modo que os testes de integração que foram excluídos do ciclo de vida padrão agora sejamincludede executem:
org.apache.maven.plugins
maven-surefire-plugin
integration-test
test
none
**/*IntegrationTest.java
Há algumas coisas que vale a pena notar:
1. A metatest demaven-surefire-plugin é executada na faseintegration-test; neste ponto, o Jetty já foi iniciado com o projeto implantado, portanto os testes de integração devem ser executados sem problemas.
2. Os testes de integração agora estãoincluded na execução. Para conseguir isso, as exclusões também são substituídas - isso ocorre porque o Maven lida com a substituição das configurações de plug-in nos perfis. A configuração base não é completamente substituída, mas aumentada com novos elementos de configuração dentro do perfil. Por causa disso, a configuração original<excludes>, que excluiu os testes de integração em primeiro lugar, ainda está presente no perfil e precisa ser substituída, ou entraria em conflito com a configuração<includes> e o os testes ainda não funcionavam.
3. Observe que, como há apenas um único elemento<execution>, háno need for an id a ser definido.
Agora, todo o processo pode ser executado:
mvn clean install -Pintegração
Conclusão
A configuração passo a passo do Maven abrange todo o processo de instalação do processo de integração como parte do ciclo de vida do projeto.
Geralmente, isso é configurado para ser executado em um ambiente de Integração Contínua, de preferência após cada confirmação. Se o servidor de CI já tiver um servidor executando e consumindo portas, a configuração de carga terá que lidar com esse cenário, que abordarei em uma publicação futura.
Para obter uma configuração de execução completa deste mecanismo, verifique oREST GitHub project.
Tambémcheck out this article para melhores práticas de estruturação de um projeto e organização da unidade e testes de integração.