Eu tenho um projeto multi-módulo do maven2 e em cada um dos meus módulos filhos tenho testes JUnit nomeados Test.java
e Integration.java
para testes de unidade e testes de integração, respectivamente. Quando executo:
mvn test
todos os testes JUnit *Test.java
nos módulos filhos são executados. Quando executo
mvn test -Dtest=**/*Integration
nenhum dos Integration.java
testes é executado nos módulos filhos.
Estes parecem ser exatamente o mesmo comando para mim, mas aquele com o -Dtest = / * Integration ** não funciona, exibe 0 testes sendo executados no nível pai, que não existem testes
Respostas:
Você pode configurar o Maven's Surefire para executar testes de unidade e testes de integração separadamente. Na fase de teste de unidade padrão, você executa tudo o que não corresponde a um teste de integração. Em seguida, você cria uma segunda fase de teste que executa apenas os testes de integração.
Aqui está um exemplo:
fonte
O ciclo de vida de construção do Maven agora inclui a fase "teste de integração" para executar testes de integração, que são executados separadamente dos testes de unidade executados durante a fase "teste". Ele é executado após o "pacote", portanto, se você executar "mvn Verifique", "mvn install" ou "mvn deploy", os testes de integração serão executados ao longo do caminho.
Por padrão, a integração-teste é executado classes de teste nomeados
**/IT*.java
,**/*IT.java
e**/*ITCase.java
, mas isso pode ser configurado.Para obter detalhes sobre como conectar tudo isso, consulte o plug-in Failsafe , a página de uso do Failsafe (não está corretamente vinculada à página anterior enquanto escrevo isso) e também confira esta postagem no blog Sonatype .
fonte
mvn integration-test
também executa testes de unidade (usando via surefire), masmvn failsafe:integration-test
executa apenas os testes de integração à prova de falhas.package
fase, isso significa que devo colocar todo o meu código-fonte Java IT emsrc/main/java
vez de estarsrc/test/java
certo?Fiz exatamente o que você quer fazer e funciona muito bem. Testes de unidade "* Tests" sempre são executados e "* IntegrationTests" são executados apenas quando você faz uma verificação mvn ou instala mvn. Aqui está o trecho do meu POM. serg10 quase acertou .... mas não exatamente.
Boa sorte!
fonte
clean compile integration-test -Dmaven.test.failure.ignore=false
Você pode dividi-los facilmente usando as categorias JUnit e Maven.
Isso é mostrado muito, muito brevemente abaixo, dividindo os testes de unidade e integração.
Definir uma interface de marcador
A primeira etapa no agrupamento de um teste usando categorias é criar uma interface de marcador.Essa interface será usada para marcar todos os testes que você deseja executar como testes de integração.
Marque suas aulas de teste
Adicione a anotação da categoria ao topo da sua classe de teste. Leva o nome da sua nova interface.
Configurar testes de unidade Maven
A beleza desta solução é que nada realmente muda para o lado do teste de unidade.Simplesmente adicionamos algumas configurações ao plug-in maven surefire para ignorar qualquer teste de integração.
Quando você faz um
mvn clean test
, apenas seus testes de unidade não marcados serão executados.Configurar testes de integração do Maven
Novamente, a configuração para isso é muito simples.Usamos o plug-in padrão à prova de falhas e o configuramos para executar apenas os testes de integração.
A configuração usa uma meta de execução padrão para executar o plug-in à prova de falhas durante a fase de teste de integração da compilação.
Agora você pode fazer um
mvn clean install
.Desta vez, assim como os testes de unidade em execução, os testes de integração são executados durante a fase de teste de integração.
fonte
Você deve tentar usar o plug-in à prova de falhas maven . Você pode dizer para incluir um determinado conjunto de testes.
fonte
maven-failsafe-plugin
foi para Plugin Graveyardfailsafe
plugin foi movido paramaven-failsafe-plugin
. Parece quemaven-failsafe-plugin
ainda está ativo (os documentos foram enviados pela última vez em março de 2014).Por padrão, o Maven executa apenas testes que possuem Test em algum lugar no nome da classe.
Renomeie para IntegrationTest e provavelmente funcionará.
Como alternativa, você pode alterar a configuração do Maven para incluir esse arquivo, mas provavelmente é mais fácil e melhor nomear seus testes como SomethingTest.
Das inclusões e exclusões de testes :
fonte
Outra maneira de executar testes de integração com o Maven é usar o recurso de perfil:
Executando 'mvn clean install' executará a compilação padrão. Conforme especificado acima, os testes de integração serão ignorados. A execução do 'mvn clean install -P integration-tests' incluirá os testes de integração (eu também ignoro meus testes de integração de preparação). Além disso, tenho um servidor de IC que executa meus testes de integração todas as noites e, para isso, emito o comando 'mvn test -P integration-tests' .
fonte
Você pode seguir a documentação do maven para executar os testes de unidade com a construção e executar os testes de integração separadamente.
Isso permitirá que você execute com todos os testes de integração desativados por padrão. Para executá-los, use este comando:
fonte
Você deve usar o plug - in maven surefire para executar testes de unidade e o plugin maven fail-safe para executar testes de integração.
Siga abaixo se você deseja alternar a execução desses testes usando sinalizadores.
Configuração do Maven
Portanto, os testes serão ignorados ou alternados de acordo com as regras de sinalização abaixo:
Os testes podem ser ignorados pelas bandeiras abaixo:
-DskipTests
pula os testes de unidade e de integração-DskipUnitTests
pula testes de unidade, mas executa testes de integração-DskipIntegrationTests
pula testes de integração, mas executa testes de unidadeExecutando testes
Execute abaixo para executar apenas testes de unidade
Você pode executar o comando abaixo para executar os testes (unidade e integração)
Para executar apenas testes de integração, siga
Ou pule os testes de unidade
Além disso, para ignorar os testes de integração durante
mvn install
, sigaVocê pode pular todos os testes usando
fonte