90 votes

maven : : exécuter un seul test dans un projet multi-module

Existe-t-il un moyen de fournir un argument en ligne de commande afin d'ignorer tous les tests sauf un sur un module ? Ainsi, je n'aurai pas besoin de modifier pom.xml à chaque fois que j'aurai besoin d'exécuter un autre test ?

Par exemple, je veux créer une configuration de construction sur TeamCity, et fournir des arguments de ligne de commande pour exécuter un seul test dans un module. La prochaine fois, je devrai le modifier et exécuter un autre test, et ainsi de suite.

Peut-être que ce n'est pas la façon dont l'IC est censé être utilisé, mais quand même.

114voto

Nick Gerner Points 336

Je suppose que vous avez lu les documents concernant exécuter un seul test sous surefire ? Ce qu'ils ne vous disent pas, c'est comment faire cela dans un sous-module :

mvn test -Dtest=testname -pl subproject

Dónde subproject est le projet contenant ce test. Extrait de la page de manuel mvn :

-pl,--projects arg Liste délimitée par des virgules des projets de réacteurs spécifiés à construire au lieu de tous les projets. Un projet peut être spécifié par [groupId]:artifactId ou par son chemin relatif.

44voto

Debosmit Ray Points 16

D'autres réponses que je vois ne sont pas entièrement complètes, pour des projets qui dépendent d'autres sous-modules à construire. Une option est d'exécuter mvn install pour avoir les jarres nécessaires à l'installation dans ~/.m2/... mais cette option n'est pas très "propre".

La commande suivante construira les sous-modules, et exécutera seulement la classe de test qui est spécifiée. Cette commande doit être exécutée au niveau du module parent. De plus, il n'est pas nécessaire de spécifier le nom du sous-module.

mvn test -DfailIfNoTests=false -Dtest={test_class_name} -am

D'ailleurs, cela peut aussi être mvn clean test -Dfa..... . J'ai l'habitude de toujours courir clean lors de l'exécution des tests.

Des références
-am va créer tous les autres sous-modules.
-DfailIfNoTests=false ne fait pas échouer l'ensemble du processus puisque nous n'avons pas l'intention d'exécuter des tests dans d'autres modules.
-pl n'est pas nécessaire puisque l'option -am est déjà en train de tout construire

14voto

Lalit Kumar Points 149

Dans le cas où le module à tester dépend d'autres projets, la solution fonctionne en changeant les commandes comme :

mvn test -DfailIfNoTests=false -Dtest=testname -pl subproject

0voto

MichaelZ Points 611

Pour information, si vous avez un projet multi-module, vous pouvez exécuter tous les tests avec cette commande dans le répertoire parent.

mvn test -pl subproject

Et le subproject Le nom de l'utilisateur peut être trouvé en exécutant la commande suivante, généralement sous la forme suivante group-id:artifact-id .

mvn help:active-profiles

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