Dans mon projet Maven, j'ai plusieurs modules. Est-il possible de désactiver le test unitaire en cours pour certains modules via les options de ligne de commande?
Mon projet prend environ 15 minutes pour exécuter tous les tests unitaires. J'aimerais 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 pom.xml individuel pour réaliser ceci.
J'ai essayé une solution décrite ici: Puis-je exécuter un groupe de tests spécifique via maven? Cependant, le résultat est un nombre d'échecs de tests dans les modules que je souhaite ignorer. Je suppose que "groupe" n'est pas le même concept de module?
Pour activer ou désactiver les tests unitaires pour un projet entier, utilisez capacité du plug-in Maven Surefire à ignorer les tests . Il y a un inconvénient à utiliser skipTests à partir de la ligne de commande. Dans un scénario de construction multi-module, cela désactiverait tous les tests de tous les modules.
Si vous avez besoin d'un contrôle plus fin du grain pour exécuter un sous-ensemble de tests pour un module, examinez l'utilisation de = capacités d'inclusion et d'exclusion de tests 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:
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.9</version>
<configuration>
<excludes>
<exclude>${someModule.test.excludes}</exclude>
</excludes>
<includes>
<include>${someModule.test.includes}</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<someModule.skip.tests>false</someModule.skip.tests>
<skipTests>${someModule.skip.tests}</skipTests>
<someModule.test.includes>**/*Test.Java</someModule.test.includes>
<someModule.test.excludes>**/*Test.Java.bogus</someModule.test.excludes>
</properties>
Avec un POM comme ci-dessus, vous pouvez exécuter des tests de différentes manières.
mvn test
mvn -DskipTests=true test
mvn -DsomeModule.skip.tests=true test
mvn -DsomeModule.test.includes="**/*IncludeTest.Java" test
mvn -DsomeModule.test.excludes="**/*ExcludeTest.Java" test
… Et si vous voulez passer le paramètre au plugin maven release dans Hudson/Jenkins, vous devez utiliser -Darguments=-DskipTests
pour que ça marche.
Trouver un moyen d'exclure en 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/
Si vous souhaitez utiliser les profils Maven:
vous voudrez peut-être que cela fonctionne avec quelque chose comme ceci:
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, comme dans cette page de documentation:
c'est-à-dire quelque chose comme:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<skipTests>${moduleA.skipTests}</skipTests>
</configuration>
</plugin>
puis en utilisant mvn -DmoduleA.skipTests=false test
pour tester ce module.