web-dev-qa-db-fra.com

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

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

Par exemple, je veux créer une configuration de build 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 changer et exécuter un autre test, etc.

Ce n'est peut-être pas la façon dont CI doit être utilisé, mais quand même.

52
jdevelop

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

mvn test -Dtest=testname -pl subproject

subproject est le projet contenant ce test. Depuis la page de manuel mvn:

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

74
Nick Gerner

Les autres réponses que je vois ne sont pas entièrement complètes, pour les projets qui dépendent d'autres sous-modules à construire. Une option consiste à exécuter mvn install Pour que les pots requis soient installés dans ~/.m2/..., Mais cette option n'est pas très "propre".

La commande suivante crée les sous-modules et exécute uniquement la classe de test spécifiée. Cela doit être exécuté au niveau du module parent. De plus, pas besoin de spécifier le nom du sous-module.

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

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

Les références..
-am Créera tous les autres sous-modules.
-DfailIfNoTests=false N'échoue pas à l'ensemble du processus car nous n'avons pas l'intention d'exécuter des tests dans d'autres modules.
L'option -pl N'est pas nécessaire car -am Est déjà en train de tout construire

21
Debosmit Ray

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

Référence: http://www.automatethebox.com/2015/12/some-helpful-commands-to-build-multi.html

14
Lalit Kumar