Sauter des tests avec Maven

1. Introduction

Sauter des tests est souvent une mauvaise idée. Cependant, dans certaines situations, cela pourrait être utile - peut-être lorsque nous développons un nouveau code et que nous voulons exécuter des versions intermédiaires dans lesquelles les tests ne passent pas ou ne sont pas compilés.

Dans ces types de situations uniquement, nous pouvons ignorer les tests pour éviter la surcharge liée à leur compilation et à leur exécution. Bien sûr, considérez que ne pas exécuter de tests peut conduire à de mauvaises pratiques de codage.

Dans ce tutoriel rapide, nous explorerons toutes les commandes et options possibles pour ignorer les tests à l'aide de Maven .

2. Cycle de vie Maven

Avant d'entrer dans les détails sur la façon d'ignorer les tests, nous devons comprendre quand les tests sont compilés ou exécutés . Dans l'article sur les objectifs et les phases de Maven, nous approfondissons le concept du cycle de vie de Maven, mais aux fins de cet article, il est important de savoir que Maven peut:

  1. Ignorer les tests
  2. Compiler des tests
  3. Exécuter des tests

Dans nos exemples, nous utiliserons la phase du package , qui comprend la compilation et l'exécution des tests. Les options explorées tout au long de ce didacticiel appartiennent au plugin Maven Surefire.

3. Utilisation des indicateurs de ligne de commande

3.1. Ignorer la compilation de test

Tout d'abord, regardons un exemple de test qui ne se compile pas:

@Test public void thisDoesntCompile() { baeldung; }

Lorsque nous exécutons la commande de ligne de commande:

mvn package

Nous obtiendrons une erreur:

[INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /Users/baeldung/skip-tests/src/test/java/com/antmordel/skiptests/PowServiceTest.java:[11,9] not a statement [INFO] 1 error

Par conséquent, explorons comment ignorer la phase de compilation pour les sources du test. Dans Maven, nous pouvons utiliser le drapeau maven.test.skip :

mvn -Dmaven.test.skip package

Par conséquent, les sources de test ne sont pas compilées et, par conséquent, ne sont pas exécutées.

3.2. Ignorer l'exécution du test

Comme deuxième option, voyons comment nous pouvons compiler le dossier de test mais ignorer le processus d'exécution . Ceci est utile dans les cas où nous ne changeons pas la signature des méthodes ou des classes, mais nous avons changé la logique métier et, par conséquent, nous avons cassé les tests. Considérons un cas de test artificiel comme celui ci-dessous, qui échouera toujours:

@Test public void thisTestFails() { fail("This is a failed test case"); }

Puisque nous avons inclus l'instruction fail () , si nous exécutons la phase du package , la construction échouera avec l'erreur:

[ERROR] Failures: [ERROR] PowServiceTest.thisTestFails:16 This is a failed test case [INFO] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0

Imaginons que nous voulions ignorer l'exécution des tests mais que nous voulions tout de même les compiler. Dans ce cas, nous pouvons utiliser l' indicateur -DskipTests :

mvn -DskipTests package

et la phase de package réussira. De plus, dans Maven, il existe un plugin dédié pour exécuter des tests d'intégration appelé plugin maven failafe. Le -DskipTests sautera l'exécution des tests unitaires (surefire) et des tests d'intégration (de sécurité). Afin de simplement ignorer les tests d'intégration, nous pouvons passer la propriété système -DskipITs .

Enfin, il convient de mentionner que l'indicateur désormais obsolète -Dmaven.test.skip.exec compilera également les classes de test mais ne les exécutera pas.

4. Utilisation de la configuration Maven

Dans le cas où nous devons exclure la compilation ou l'exécution des tests pendant une période plus longue, nous pouvons modifier le fichier pom.xml afin d'inclure la configuration appropriée.

4.1. Ignorer la compilation de test

Comme nous l'avons fait dans la section précédente, examinons comment nous pouvons éviter de compiler le dossier de test. Dans ce cas, nous utiliserons le fichier pom.xml . Ajoutons la propriété suivante:

 true 

Gardez à l'esprit que nous pouvons remplacer cette valeur en ajoutant l'indicateur opposé dans la ligne de commande :

mvn -Dmaven.test.skip=false package

4.2. Ignorer l'exécution du test

Encore une fois, dans un deuxième temps, explorons comment nous pouvons créer le dossier de test mais ignorer l'exécution du test en utilisant la configuration Maven. Pour ce faire, nous devons configurer le plugin Maven Surefire avec une propriété:

 true   org.apache.maven.plugins maven-surefire-plugin 2.22.1  ${tests.skip}  

La propriété Maven tests.skip est une propriété personnalisée que nous avons précédemment définie. Par conséquent, nous pouvons le remplacer si nous voulons exécuter les tests:

mvn -Dtests.skip=false package

4. Conclusion

Dans ce rapide tutoriel, nous avons exploré toutes les alternatives proposées par Maven afin d'ignorer la compilation et / ou l'exécution des tests.

Nous sommes passés par les options de ligne de commande Maven et les options de configuration Maven.