web-dev-qa-db-fra.com

maven: Comment puis-je ignorer le test de 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 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?

61
Anthony Kong

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.

  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 de 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
82
Brent Worden

… Et si vous voulez passer le paramètre au plugin maven release dans Hudson/Jenkins, vous devez utiliser -Darguments=-DskipTests pour que ça marche.

13
Ralf

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/

5
akostadinov

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.

4
icyrock.com