Construa um jar com Maven e ignore os resultados do teste
1. Introdução
Este guia rápido mostra como criar um frasco com o Maven enquanto ignora os resultados do teste.
Por padrão, o Maven executa testes de unidade automaticamente ao criar o projeto. No entanto,there are rare cases when the tests can be skipped and we need to build the project regardless of the test results.
2. Construindo o Projeto
Vamos criar um projeto simples onde também incluímos um pequeno caso de teste:
public class TestFail {
@Test
public void whenMessageAssigned_thenItIsNotNull() {
String message = "hello there";
assertNotNull(message);
}
}
Vamos construir um arquivo jar executando o seguinte comando Maven:
mvn package
Isso resultará na compilação das fontes e na geração de um arquivomaven-0.0.1-SNAPSHOT.jar no diretório / target.
Agora, vamos mudar o teste um pouco, então o teste começa a falhar.
@Test
public void whenMessageAssigned_thenItIsNotNull() {
String message = null;
assertNotNull(message);
}
Desta vez, quando tentamos executar o comandomvn package novamente, a compilação falha e o arquivo maven-0.0.1-SNAPSHOT.jar não é criado.
Isso significa,if we have a failing test in our application, we can’t provide an executable file unless we fix the test.
Então, como podemos resolver esse problema?
3. Argumentos Maven
Maven tem seus próprios argumentos para lidar com esse problema:
-
-Dmaven.test.failure.ignore=true ignora qualquer falha que ocorra durante a execução do teste
-
-Dmaven.test.skip=true não compilaria os testes
-
-fn,-fae nunca falha na compilação, independentemente dos resultados do teste
Vamos executar o comandomvn package -Dmaven.test.skip=true e ver os resultados:
[INFO] Tests are skipped.
[INFO] BUILD SUCCESS
Isso significa que o projeto será construído sem compilar os testes.
Agora vamos executar o esquemamvn package -Dmaven.test.failure.ignore=true :
[INFO] Running testfail.TestFail
[ERROR] whenMessageAssigned_thenItIsNotNull java.lang.AssertionError
[INFO] BUILD SUCCESS
Nosso teste de unidade falha na asserção, mas a compilação é bem-sucedida.
Finalmente, vamos testar as opções-fn,-fae. Os comandospackage -fnepackage -fae criam o arquivojar e produzem a saídaBUILD SUCCESS independentemente da falha do teste dewhenMessageAssigned_thenItIsNotNull().
No caso do projeto multimódulo, a opção-fn deve ser usada. -fae continua com o módulo que tem um teste com falha, mas pula todos os módulos dependentes.
4. Maven Surefire Plugin
Outra maneira conveniente de atingir nosso objetivo é usar o plugin Surefire do Maven.
Para uma visão geral estendida do plugin Surefire, consultethis article.
To ignore test fails we can simply set the testFailureIgnore property to true:
maven-surefire-plugin
${maven.surefire.version}
TestFail.java
true
Agora, vamos ver a saída do comandopackage:
[INFO] T E S T S
[INFO] Running testfail.TestFail
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, <<< FAILURE! - in testfail.TestFail
Na saída dos testes em execução, podemos ver que a classeTestFail está falhando. Porém, olhando mais adiante, vemos que a mensagem BUILD SUCCESS também está lá e o arquivo maven-0.0.1-SNAPSHOT.jar é compilado.
Dependendo da nossa necessidade, podemos ignorar a execução dos testes. Para isso, podemos substituir a linhatestFailureIgnore por:
true
Ou defina o argumento da linha de comando-DskipTests. Isso irá compilar as classes de teste, mas pulará totalmente a execução do teste.
5. Conclusão
In this article, we learned how to build our project with Maven regardless of the test results. Passamos pelos exemplos práticos de pular os testes com falha ou excluir completamente a compilação dos testes.
Como de costume, o código completo deste artigo está disponívelover on GitHub project.