Construire un pot avec Maven et ignorer les résultats du test

Construire un bocal avec Maven et ignorer les résultats du test

1. introduction

Ce guide rapide explique comment construire 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,there are rare cases when the tests can be skipped and we need to build the project regardless of the test results.

2. Construire le projet

Créons un projet simple dans lequel nous incluons également un petit cas de test:

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

Créons 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 fichiermaven-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 commandemvn package, la construction échoue et le fichier maven-0.0.1-SNAPSHOT.jar n'est pas créé.

Cela signifie,if we have a failing test in our application, we can’t provide an executable file unless we fix the test.

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

3. Arguments de Maven

Maven a ses propres arguments pour régler 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 du test

Exécutons la commandemvn 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 la commandemvn package -Dmaven.test.failure.ignore=true :

[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 commandespackage -fn etpackage -fae construisent le fichierjar et produisent la sortieBUILD SUCCESS indépendamment de l'échec du testwhenMessageAssigned_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. Plugin Maven Surefire

Un autre moyen pratique d’atteindre notre objectif consiste à utiliser le plugin Surefire de Maven.

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

To ignore test fails we can simply set the testFailureIgnore property to true:


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

Voyons maintenant la sortie de la commandepackage:

[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, nous pouvons voir que la classeTestFail échoue. Mais en regardant plus loin, nous voyons que le message BUILD SUCCESS est également là et que le fichier maven-0.0.1-SNAPSHOT.jar est compilé.

En fonction de nos besoins, nous pouvons ignorer l'exécution des tests. Pour cela, nous pouvons remplacer la lignetestFailureIgnore par:

true

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

5. Conclusion

In this article, we learned how to build our project with Maven regardless of the test results. Nous avons passé en revue les exemples pratiques consistant à ignorer les tests ayant échoué ou à exclure entièrement la compilation des tests.

Comme d'habitude, le code complet de cet article est disponibleover on GitHub project.