Construisez un pot avec Maven et ignorez les résultats du test

1. Introduction

Ce guide rapide montre comment créer un pot avec Maven tout en ignorant les résultats du test.

Par défaut, Maven exécute automatiquement les tests unitaires lors de la construction du projet. Cependant, il existe de rares cas où les tests peuvent être ignorés et nous devons créer le projet quels que soient les résultats des tests.

2. Construction du projet

Créons un projet simple où nous incluons également un petit cas de test:

public class TestFail { @Test public void whenMessageAssigned_thenItIsNotNull() { String message = "hello there"; assertNotNull(message); } }

Construisons un fichier jar en exécutant la commande Maven suivante:

mvn package

Cela entraînera la compilation des sources et la génération d'un fichier maven-0.0.1-SNAPSHOT.jar sous le répertoire / target.

Maintenant, modifions un peu le test pour que le test commence à échouer.

@Test public void whenMessageAssigned_thenItIsNotNull() { String message = null; assertNotNull(message); }

Cette fois, lorsque nous essayons d'exécuter à nouveau la commande mvn package , la construction échoue et le fichier maven-0.0.1-SNAPSHOT.jar n'est pas créé.

Cela signifie que si nous avons un test qui échoue dans notre application, nous ne pouvons pas fournir de fichier exécutable à moins que nous ne corrigions le test.

Alors, comment pouvons-nous résoudre ce problème?

3. Arguments de Maven

Maven a ses propres arguments pour traiter ce problème:

  • -Dmaven.test.failure.ignore = true ignore tout échec qui se produit pendant l'exécution du test
  • -Dmaven.test.skip = true ne compilerait pas les tests
  • -fn , -fae n'échoue jamais la construction quels que soient les résultats des tests

Exécutons la commande mvn package -Dmaven.test.skip = true et voyons les résultats:

[INFO] Tests are skipped. [INFO] BUILD SUCCESS

Cela signifie que le projet sera construit sans compiler les tests.

Maintenant, exécutons le package mvn -Dmaven.test.failure.ignore = true commande:

[INFO] Running testfail.TestFail [ERROR] whenMessageAssigned_thenItIsNotNull java.lang.AssertionError [INFO] BUILD SUCCESS

Notre test unitaire échoue lors de l'assertion mais la construction est réussie.

Enfin, testons les options -fn , -fae . Les commandes package -fn et package -fae créent le fichier jar et produisent la sortie BUILD SUCCESS indépendamment de l' échec du test whenMessageAssigned_thenItIsNotNull () .

Dans le cas du projet multi-module, l' option -fn doit être utilisée. -fae continue avec le module dont le test a échoué mais ignore tous les modules dépendants.

4. Plug-in Maven Surefire

Un autre moyen pratique d'atteindre notre objectif est d'utiliser le plugin Surefire de Maven.

Pour une présentation détaillée du plugin Surefire, reportez-vous à cet article.

Pour ignorer les échecs de test, nous pouvons simplement définir la propriété testFailureIgnore sur true :

 maven-surefire-plugin ${maven.surefire.version}   TestFail.java  true  

Voyons maintenant la sortie de la commande package :

[INFO] T E S T S [INFO] Running testfail.TestFail [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, <<< FAILURE! - in testfail.TestFail

À partir de la sortie des tests en cours d'exécution, nous pouvons voir que la classe TestFail échoue. Mais en regardant plus loin, nous voyons que le message BUILD SUCCESS est également présent et que le fichier maven-0.0.1-SNAPSHOT.jar est compilé.

Selon nos besoins, nous pouvons ignorer l'exécution des tests. Pour cela, nous pouvons remplacer la ligne testFailureIgnore par:

true

Ou définissez l'argument de ligne de commande -DskipTests . Cela compilera les classes de test mais sautera complètement l'exécution du test.

5. Conclusion

Dans cet article, nous avons appris à construire notre projet avec Maven quels que soient les résultats des tests . Nous avons passé en revue les exemples pratiques de sauter les tests échouants ou d'exclure complètement la compilation des tests.

Comme d'habitude, le code complet de cet article est disponible sur le projet GitHub.