Exécuter une seule méthode de test avec maven

Je sais que vous pouvez exécuter tous les tests dans une certaine classe en utilisant:

mvn test -Dtest=classname 

Mais je veux exécuter une méthode individuelle et -Dtest = classname.methodname ne semble pas fonctionner.

Pour exécuter une méthode de test unique dans Maven, vous devez fournir la commande en tant que:

 mvn -Dtest=TestCircle#xyz test 

TestCircle est le nom de la classe de test et xyz est la méthode de test.

Les caractères génériques fonctionnent également. à la fois dans le nom de la méthode et le nom de la classe.

Si vous testez un projet multi-module, spécifiez le module dans lequel se trouve le test avec -pl .

Pour les tests d’intégration, utilisez it.test=... au lieu de test=... :

 mvn -pl  -Dit.test=TestCircle#xyz integration-test 

Il y a un problème avec surefire 2.12. C’est ce qui m’est arrivé en changeant le plugin maven-surefire de 2.12 à 2.11:

  1. mvn test -Dtest=DesignRulesTest

    Résultat:
    [ERREUR] Echec de l’exécution du but org.apache.maven.plugins: plugin maven-surefire: 2.12 : test (test par défaut) sur le projet pmd: Aucun test n’a été exécuté!

  2. mvn test -Dtest=DesignRulesTest

    Résultat: [INFO] — maven-surefire-plugin: 2.11 : test (default-test) @ pmd — … Exécution de net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Tests effectués: 5 , Échecs: 0, erreurs: 0, sauté: 4, temps écoulé: 4.009 sec

Ce que je fais avec mon testNG, (désolé, JUnit ne supporte pas cela) est que je peux assigner un groupe au test que je veux exécuter

 @Test(groups="broken") 

Et puis lancez simplement ‘mvn -Dgroups = broken’.

Exécution d’un ensemble de méthodes dans une classe de test unique Avec la version 2.7.3, vous ne pouvez exécuter que n tests dans une seule classe de test.

NOTE: il est supporté pour junit 4.x et TestNG.

Vous devez utiliser la syntaxe suivante

 mvn -Dtest=TestCircle#mytest test 

Vous pouvez aussi utiliser des patterns

 mvn -Dtest=TestCircle#test* test 

A partir de surefire 2.12.1, vous pouvez sélectionner plusieurs méthodes (JUnit4X uniquement pour le moment, les correctifs sont les bienvenus)

 mvn -Dtest=TestCircle#testOne+testTwo test 

Consultez ce lien sur les tests individuels

Le paramètre de test mentionné par tobrien vous permet de spécifier une méthode utilisant un # avant le nom de la méthode. Cela devrait fonctionner pour JUnit et TestNG. Je ne l’ai jamais essayé, lisez-le simplement sur la page Surefire Plugin :

Spécifiez ce paramètre pour exécuter des tests individuels par nom de fichier, en remplaçant les parameters include / excludes. Chaque modèle que vous spécifiez ici sera utilisé pour créer un modèle d’inclusion formaté comme ** / $ {test} .java, vous pouvez donc simplement saisir “-Dtest = MyTest” pour exécuter un seul test appelé “foo / MyTest.java”. Ce paramètre remplace les parameters includes / excludes et le paramètre TestNG suiteXmlFiles. depuis 2.7.3 Vous pouvez exécuter un nombre limité de méthodes dans le test en ajoutant #myMethod ou # my * ethod. Si type “-Dtest = MyTest # myMethod” supporté pour junit 4.x et testNg

Cette commande fonctionne !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test Notez que “-DTest” commence par UPPER CASE ‘T’.

Les nouvelles versions de JUnit contiennent le runner Catégories: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

Mais la procédure de publication de JUnit n’est pas basée sur Maven, les utilisateurs de Maven doivent donc la placer manuellement dans leurs référentiels.

Vous pouvez exécuter des classes de test et des méthodes spécifiques à l’aide de la syntaxe suivante:

  1. package complet: mvn test -Dtest = “com.oracle.tests. **”

  2. toutes les méthodes dans une classe: mvn test -Dtest = CLASS_NAME1

  3. méthode unique à partir d’une seule classe: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1

  4. méthode multiple à partir de plusieurs classes: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2

Vous pouvez exécuter une seule classe de test, mais pas une seule méthode dans une classe de test. Vous utilisez le nom simple de la classe et non le nom complet de la classe. Donc, si vous avez un test dans “org.sonatype.test.MyTest” et que c’est le seul test que vous voulez exécuter, votre ligne de commande devrait ressembler à ceci:

 mvn test -Dtest=MyTest 

À ma connaissance, le plugin surefire ne fournit aucun moyen de le faire. Mais n’hésitez pas à ouvrir un numéro 🙂