maven: Comment puis-je ignorer le test dans certains projets via les options de ligne de commande?

Dans mon projet Maven, j’ai plusieurs modules. Est-il possible de désactiver le test d’unité en cours d’exécution pour certains modules via les options de ligne de commande?

Mon projet prend environ 15 minutes pour parcourir tous les tests unitaires. Je voudrais accélérer la construction globale en exécutant uniquement les tests unitaires du module sur lequel je travaille. Je ne veux pas entrer et éditer chaque fichier pom.xml pour y parvenir.

J’ai essayé une solution décrite ici: Puis-je exécuter un groupe de test testng spécifique via maven? Cependant, le résultat est beaucoup d’échecs de test dans les modules que je veux ignorer. Je suppose que “groupe” n’est pas le même concept de module?

Pour activer et désactiver les tests unitaires pour un projet entier, utilisez la fonctionnalité de saut de tests de Maven Surefire Plugin . L’utilisation de skipTests à partir de la ligne de commande présente un inconvénient. Dans un scénario de construction multi-modules, tous les tests seraient désactivés sur tous les modules.

Si vous avez besoin d’un contrôle plus précis pour exécuter un sous-ensemble de tests pour un module, utilisez les capacités d’inclusion et d’exclusion de test du plug-in Maven Surefire .

Pour autoriser les remplacements de ligne de commande, utilisez les propriétés POM lors de la configuration du plug-in Surefire. Prenons par exemple le segment POM suivant:

   org.apache.maven.plugins maven-surefire-plugin 2.9   ${someModule.test.excludes}   ${someModule.test.includes}       false ${someModule.skip.tests} **/*Test.java **/*Test.java.bogus  

Avec un POM comme ci-dessus, vous pouvez exécuter des tests de différentes manières.

  1. Exécutez tous les tests (la configuration ci-dessus inclut tous les fichiers sources de test ** / * Test.java)
 mvn test 
  1. Ignorer tous les tests sur tous les modules
 mvn -DskipTests=true test 
  1. Ignorer tous les tests pour un module particulier
 mvn -DsomeModule.skip.tests=true test 
  1. N’exécutez que certains tests pour un module particulier (cet exemple inclut tous les fichiers sources de test ** / * IncludeTest.java)
 mvn -DsomeModule.test.includes="**/*IncludeTest.java" test 
  1. Exclure certains tests pour un module particulier (cet exemple exclut tous les fichiers sources ** / * ExcludeTest.java)
 mvn -DsomeModule.test.excludes="**/*ExcludeTest.java" test 

… Et si vous souhaitez passer le paramètre à Maven release plugin dans Hudson / Jenkins, vous devez utiliser -Darguments=-DskipTests pour le faire fonctionner.

Si vous souhaitez utiliser les profils Maven:

vous voudrez peut-être faire fonctionner quelque chose comme ceci:

  • Ignorer les tests dans certains modules de Maven

Je ne sais pas s’il existe une option de ligne de commande prise en charge qui fait la même chose.

Vous pouvez également essayer d’utiliser directement les propriétés de l’environnement, conformément à cette page de documentation:

c’est à dire quelque chose comme:

   org.apache.maven.plugins maven-surefire-plugin 2.12  ${moduleA.skipTests}   

puis en utilisant mvn -DmoduleA.skipTests=false test pour tester ce module.

Trouvé un moyen d’exclure sur la ligne de commande:

 # Exclude one test class, by using the explanation mark (!) mvn test -Dtest=!LegacyTest # Exclude one test method mvn verify -Dtest=!LegacyTest#testFoo # Exclude two test methods mvn verify -Dtest=!LegacyTest#testFoo+testBar # Exclude a package with a wildcard (*) mvn test -Dtest=!com.mycompany.app.Legacy* 

Ceci est de: https://blog.jdriven.com/2017/10/run-one-or-exclude-one-test-with-maven/