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.
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.
Réponses:
Pour exécuter une seule méthode de test dans Maven, vous devez fournir la commande sous la forme:
mvn test -Dtest=TestCircle#xyz test
où TestCircle
est le nom de la classe de test etxyz
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 dans un projet multi-module, spécifiez le module avec lequel le test est effectué -pl <module-name>
.
Pour les tests d'intégration, utilisez l' it.test=...
option au lieu de test=...
:
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
-pl <module-name>
.
-DfailIfNoTests=false
de sauter des projets sans test. No Tests Were Executed
se produit lorsque vous essayez d'exécuter le test à partir du projet racine et qu'il y a des modules sans tests du tout.
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Notez que "-DTest" commence par UPPER CASE 'T'.
Il y a un problème avec surefire 2.12. C'est ce qui m'arrive en changeant le plugin maven-surefire de 2.12 à 2.11:
mvn test -Dtest=DesignRulesTest
Résultat:
[ERREUR] Impossible d'exécuter l'objectif org.apache.maven.plugins: maven-surefire-plugin: 2.12 : test (test par défaut) sur le projet pmd: aucun test n'a été exécuté!
mvn test -Dtest=DesignRulesTest
Résultat: [INFO] --- maven-surefire-plugin: 2.11 : test (default-test) @ pmd --- ... Running net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Tests run: 5 , Échecs: 0, Erreurs: 0, Ignoré: 4, Temps écoulé: 4,009 s
@Category(IntegrationTest.class)
, utilisez -Dit.test=ClassName
, sinon vous obtiendrez No tests were executed!
même avec les dernières versions du plugin.
Ce que je fais avec mon TestNG, (désolé, JUnit ne le supporte pas), c'est que je peux assigner un groupe au test que je veux exécuter
@Test(groups="broken")
Et puis exécutez simplement 'mvn -Dgroups = broken'.
Exécution d'un ensemble de méthodes dans une seule classe de test Avec la version 2.7.3, vous ne pouvez exécuter que n tests dans une seule classe de test.
REMARQUE: il est pris en charge pour junit 4.x et TestNG.
Vous devez utiliser la syntaxe suivante
mvn -Dtest=TestCircle#mytest test
Vous pouvez également utiliser des modèles
mvn -Dtest=TestCircle#test* test
À partir de surefire 2.12.1, vous pouvez sélectionner plusieurs méthodes (JUnit4X uniquement pour le moment, correctifs bienvenus)
mvn -Dtest=TestCircle#testOne+testTwo test
Vérifiez ce lien sur les tests simples
Vous pouvez exécuter des classes et des méthodes de test spécifiques en utilisant la syntaxe suivante:
package complet: mvn test -Dtest = "com.oracle.tests. **"
toutes les méthodes dans une classe: test mvn -Dtest = CLASS_NAME1
méthode unique à partir d'une seule classe: test mvn -Dtest = CLASS_NAME1 # METHOD_NAME1
méthode multiple de classe multiple: test mvn -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2
Cette commande fonctionne !!
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Notez que "-DTest" commence par UPPER CASE 'T'.
Le paramètre de test mentionné par tobrien vous permet de spécifier une méthode en utilisant un # avant le nom de la méthode. Cela devrait fonctionner pour JUnit et TestNG. Je ne l'ai jamais essayé, il suffit de le lire sur la page du plugin Surefire :
Spécifiez ce paramètre pour exécuter des tests individuels par nom de fichier, en remplaçant les paramètres d'inclusion / exclusion. 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 taper "-Dtest = MyTest" pour exécuter un seul test appelé "foo / MyTest.java". Ce paramètre remplace les paramètres include / 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" pris en charge pour junit 4.x et testNg
Les nouvelles versions de JUnit contiennent le coureur Catégories: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html
Mais la procédure de libération de JUnit n'est pas basée sur Maven, les utilisateurs de Maven doivent donc la mettre manuellement dans leurs référentiels.
À partir de la version 2.22.1 du plugin surefire (peut-être plus tôt), vous pouvez exécuter un test unique en utilisant la propriété testnames lorsque vous utilisez testng.xml
Étant donné un testng.xml suivant
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="all-tests">
<classes>
<class name="server.Atest"/>
<class name="server.Btest"/>
<class name="server.Ctest"/>
</classes>
</test>
<test name="run-A-test">
<classes>
<class name="server.Atest"/>
</classes>
</test>
<test name="run-B-test">
<classes>
<class name="server.Btest"/>
</classes>
</test>
<test name="run-C-test">
<classes>
<class name="server.Ctest"/>
</classes>
</test>
</suite>
avec le pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
[...]
<properties>
<selectedTests>all-tests</selectedTests>
</properties>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<suiteXmlFiles>
<file>src/test/resources/testng.xml</file>
</suiteXmlFiles>
<properties>
<property>
<name>testnames</name>
<value>${selectedTests}</value>
</property>
</properties>
</configuration>
</plugin>
</plugins>
[...]
</project>
Depuis la ligne de commande
mvn clean test -DselectedTests=run-B-test
Lectures complémentaires - Maven surefire plugin using testng
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 souhaitez exécuter, votre ligne de commande ressemblera à ceci:
mvn test -Dtest=MyTest
À ma connaissance, le plugin surefire ne fournit aucun moyen de le faire. Mais n'hésitez pas à ouvrir un problème :)
mvn test -Dtest=classname
syntaxe.