maven-surefire-plugin inclure/exclure priorité

lors de l'utilisation du Maven-surefire-plugin et à la fois inclut et exclut, dans quel ordre sont-ils traités? En outre, si vous avez 3 séries de tests, la première étant la série de base, la deuxième et la troisième étant des cas spéciaux, pouvez-vous utiliser les profils pour inclure/exclure davantage? Comment le profil inclura/exclura les paramètres sera-t-il fusionné? Par exemple, je voudrais faire quelque chose comme ceci:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.2</version>
        <configuration>
          <excludes>
            <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
            <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>connectedToProdNetwork</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>/org/mycompany/dataset/test/ExtractProd*.java</include>
              </includes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>runForAsLongAsYouNeed</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <includes>
                <include>/org/mycompany/dataset/test/LargeDataset*.java</include>
              </includes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

et puis être capable de courir comme ceci:

mvn package -P connectedToProdNetwork

ou

mvn package -P runForAsLongAsYouNeed

ou

mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed

---- mise à JOUR -----

en utilisant mvn help:effective-pom -P [profileA] j'ai été en mesure de déterminer que si je spécifier un profil unique, le résultat efficace pom sera:

        <configuration>
          <includes>
            <include>[includeFromProfileA]</include>
          </includes>
          <excludes>
            <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
            <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
          </excludes>
        </configuration>

Et si je approvisionnement plus d'un profil, mvn help:effective-pom -P [profileA],[profileB]:

        <configuration>
          <includes>
            <include>[includeFromProfileAOrBSeeminglyArbitraryChoice]</include>
          </includes>
          <excludes>
            <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
            <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
          </excludes>
        </configuration>

Et enfin, si j'ajoute l'attribut combine.children="append"<includes> élément des configurations de profil, et fournir les deux profils,mvn help:effective-pom -P [profileA],[profileB]:

        <configuration>
          <includes combine.children="append">
            <include>[includeFromProfileA]</include>
            <include>[includeFromProfileB]</include>
          </includes>
          <excludes>
            <exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
            <exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
          </excludes>
        </configuration>

cependant, maintenant que chaque fichier est spécifié comme un <include> et <exclude>, ce qui se passe?

- - - - mise à jour 2 ----

exécute en fait un build avec cette configuration:

<configuration>
  <includes>
    <include>**/TestA.java</include>
  </includes>
  <excludes>
    <exclude>**/TestA.java</exclude>
  </excludes>
</configuration>

exécuter TestA, de sorte qu'il s'affiche <exclude> va dominer <include>. notez que par souci d'exhaustivité, j'ai inversé l'ordre et mis <excludes> avant <includes> mais le comportement n'a pas changé. Si quelqu'un peut trouver quelque part court du code source où ce comportement est décrit, je serais heureux de leur donner la réponse...

19
demandé sur A_Di-Matteo 2012-08-14 23:15:30

2 réponses

Je n'ai pas pu trouver de documentation officielle sur le plugin surefire, mais en effet l'exclusion-override-include est une approche commune et est également appliquée par Maven dans d'autres contextes similaires, comme pour les ressources.

Le seul officiel un related info (j'ai trouvé) vient de l'officiel POM Maven documentation de Référence, ici:

comprend: un ensemble de patterns de fichiers qui spécifient les fichiers à inclure en tant que ressources sous celui spécifié répertoire, utilisez * comme joker.

exclut: la même structure que includes, mais spécifie quels fichiers ignorer. Dans les conflits entre les inclure et exclure, de les exclure gagne.

NOTE: j'ai ajouté le format final en gras sur la déclaration intéressante.

donc plus que probablement la même approche est utilisée à travers les plugins officiels maven (en général, tous les plugins ayant l'org.Apache.maven.plugins groupId et maven- préfixe comme artifactId).

8
répondu A_Di-Matteo 2015-11-29 19:35:39

avez-vous essayé D'utiliser les catégories JUnit?

http://www.agile-engineering.net/2012/04/unit-and-integration-tests-with-maven.html

en utilisant cette approche, vous pourriez donner aux tests un certain nombre de catégories différentes, et les exclure/les inclure en utilisant cela, plutôt que le nom de la classe. Il s'agirait d'une approche plus extensible.

0
répondu johnmmcparland 2015-04-09 10:16:22