web-dev-qa-db-fra.com

Comment exécuter tous les tests d'un paquet particulier avec Maven?

Je peux trouver dans le Docs Maven où il montre comment exécuter:

  1. Un seul test
  2. Tous les tests dans une seule classe de tests
  3. Tous les tests dans les classes correspondant à un modèle particulier

Mais comment exécuter tous les tests d'un paquet? Est-ce possible?

Je préférerais des solutions qui ne nécessitent pas de modifier le pom.xml ou le code.

38
Eric Wilson

Vous pouvez aussi utiliser un motif, par exemple

 mvn '-Dtest=de.mypackage.*Test' test

exécute tous les tests dans les classes du paquet de.mypackage se terminant par *Test.

[mise à jour du 18/12/2017]:
Depuis que cela est devenu la réponse acceptée, voici quelques informations supplémentaires:

  • Maven utilise le plugin Maven Surefire pour exécuter des tests.
  • La syntaxe utilisée ci-dessus (nom du paquet qualifié) requiert Surefire version 2.19.1 ou supérieure! Les versions antérieures nécessitent l'utilisation d'expressions de chemin, par exemple

    mvn -Dtest="de/mypackage/*Test" test
    
  • J'utilise des guillemets (`ou") pour empêcher le shell de développer le chemin d'accès, Maven n'exige aucun guillemet.

  • Une seule méthode de test peut être exécutée en utilisant la syntaxe suivante

    mvn -Dtest=MyUnitTest#testMethod test
    
  • Tous les tests des sous-paquetages peuvent également être inclus, afin d'exécuter tous les tests dans ou sous le paquet de.mypackage.sub execute:

    mvn -Dtest="de/mypackage/sub/**" test
    

    ou avec Surefire 2.19.1 ou supérieur

    mvn -Dtest="de.mypackage.sub.**" test
    

Il existe d'autres possibilités, telles que l'utilisation d'expressions régulières, voir la documentation officielle sur l'exécution d'un seul test .

122
Robin

Autant que je sache, il n'y a pas de paramètre de ligne de commande pour surefire: test pour exécuter des tests dans un package spécifique. 

J'utilise une variable de configuration pour obtenir le même effet. Un fragment de mon pom.xml:

<build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.7.2</version>
            <configuration>
                <includes>
                    <include>**/${testGroup}/*Test.Java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

Maintenant, si je veux exécuter des tests dans un paquet nommé "com.example", j'utilise la commande suivante:

mvn test -DtestGroup=com/example
20
Nulldevice
mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.*

... et si vous souhaitez inclure tous les sous-packages:

mvn test -Dtest=com.myrootpackage.myfirstlevelpackage.**.*
7
O.Badr

La version pom.xml de la réponse de O Badr:

    <build>
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.20.1</version>
                <configuration>
                    <includes>
                 <!-- includes all tests, but not in subpackages -->
                        <include>**/package1/*</include>   
                 <!-- includes all tests, AND in subpackages -->
                        <include>**/package2/**</include>
                    </includes>
                </configuration>
            </plugin>

        </plugins>
    </build>
3
Andrejs

Vous pouvez prendre un rôle différent dans les scénarios suivants:

(1) Ignore toutes les exécutions de tests lors de la construction de maven

mvn package -DskipTests

(2) Exécuter tous les cas de test

mvn test

(3) Exécuter un groupe de test spécifique

mvn test -DincludeGroups=TestGroup1,TestGroup2

(4) Exclure un groupe de test spécifique lors de l'exécution

mvn test -DexcludeGroups=TestGroup3,TestGroup4

(5) Exécuter des cas de tests de paquetages spécifiques

mvn test -Dtest="test.Java.com.service.map.**"

(6) Exécuter un test spécifique

mvn test -Dtest=Test1,Test2

J'espère que cela vous sera plus utile avec différentes combinaisons d'exécution.

2
Radadiya Nikunj

Ce n'est peut-être pas la meilleure réponse, mais vous pouvez exécuter un seul TestSuite (qui est un test) qui inclut tous les tests souhaités dans un seul package.

1
Tristan

Cela peut aussi être fait par

mvn clean test -Dtest="**/service/**/*.Java"

par exemple: je suis dans mon/home/repository et je veux exécuter des tests sur le dossier/home/repository/service uniquement

Ici, le dossier de service est dans mon dossier actuel.

0
swapyonubuntu

Vous pouvez mentionner des paquets dans votre pom.xml via Surefire-plugin

<plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <includes>
                    <include>com.mycom.mydep.mypak.*, com.mycom.mydep.mypak2.*</include>
                </includes>
            </configuration>
        </plugin>

Veuillez noter que la version de JUnit doit être supérieure à 4.8. et la version de surefire devrait être 2.19.1 Plus de détails ici

0
Vikky