62 votes

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

Dans mon projet maven j'ai un certain nombre de modules. Est-il possible de désactiver l'exécution de test unitaire pour certains modules via les options de ligne de commande?

Mon projet prend environ 15 minutes à courir à travers tous les tests unitaires. Je voudrais accélérer la construction globale par l'exécution des tests unitaires dans le module que je suis en train de travailler sur. Je ne veux pas entrer dans le système et modifier chaque individu pom.xml pour atteindre cet objectif.

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

82voto

Brent Worden Points 5118

Pour sélectionner l'unité des tests sur et en dehors pour l'ensemble d'un projet de l'utilisation de Maven Plugin Surefire la capacité de sauter des tests. Il existe un inconvénient à l'utilisation de skipTests à partir de la ligne de commande. Dans un multi-module de construire le scénario, ce serait de désactiver tous les tests pour tous les modules.

Si vous avez besoin de plus beaux grains de contrôle de l'exécution d'un sous-ensemble de tests pour un module, regarde dans l'aide de l' Maven Plugin Surefire du test d'inclusion et d'exclusion des capacités.

Pour permettre de ligne de commande remplace, faire usage de POM propriétés lors de la configuration du Plugin Surefire. Prenons par exemple la suite de POM segment:

  <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>${module.skip.tests}</skipTests>
    <someModule.test.includes>**/*Test.java</someModule.test.includes>
    <someModule.test.excludes>**/*Test.java.bogus</someModule.test.excludes>
  </properties>

Avec une POM comme ci-dessus, vous pouvez exécuter des tests dans une variété de façons.

  1. Exécuter tous les tests (la configuration ci-dessus comprend tous les **/*Test.java test des fichiers source)

    mvn test

  2. Passer tous les tests pour tous les modules

    mvn -DskipTests=true test

  3. Passer tous les tests pour un module particulier

    mvn -DsomeModule.skip.tests=vrai test

  4. Seulement exécuter certains tests pour un module particulier (cet exemple inclues toutes les **/*IncludeTest.java test des fichiers source)

    mvn -DsomeModule.test.inclut="**/*IncludeTest.java

  5. Exclure certains tests pour un module particulier (cet exemple exclues toutes les **/*ExcludeTest.java les fichiers source)

    mvn -DsomeModule.test.exclut="**/*ExcludeTest.java

13voto

Ralf Points 81

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

4voto

icyrock.com Points 13698

Si vous souhaitez utiliser des profils Maven:

vous souhaitez peut-être du travail à faire quelque chose comme ceci:

Je ne sais pas s'il est pris en charge option de ligne de commande qui fait la même.

Vous aussi essayez d'utiliser des propriétés de l'environnement directement, quelque chose d'aussi par cette page de doc:

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>

ensuite à l'aide d' mvn -DmoduleA.skipTests=false test pour tester qu'un seul module.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X