Je sais que vous pouvez exécuter tous les tests d'une 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 seule méthode de test dans Maven, vous devez fournir la commande en tant que:
mvn test -Dtest=TestCircle#xyz test
où 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 dans un projet multi-module, spécifiez le module dans lequel se trouve le test avec -pl <module-name>
.
Pour les tests d'intégration, utilisez l'option it.test=...
au lieu de test=...
:
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
Il y a un problème avec surefire 2.12. C’est ce qui m’arrive de changer maven-surefire-plugin de 2.12 à 2.11:
mvn test -Dtest=DesignRulesTest
Résultat:
[ERROR] Impossible d'exécuter le but org.Apache.maven.plugins: maven-surefire-plugin: 2.12: test (test par défaut) sur le projet pmd: Non les tests ont été exécutés!
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: 5, Échecs: 0, Erreurs: 0, Sautés: 4, Temps écoulé: 4.009 sec
Ce que je fais avec mon TestNG (désolé, JUnit ne prend pas en charge ce type de cas), c’est que je peux affecter un groupe au test que je veux exécuter.
@Test(groups="broken")
Et ensuite, 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.
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 aussi utiliser des motifs
mvn -Dtest=TestCircle#test* test
À partir de surefire 2.12.1, vous pouvez sélectionner plusieurs méthodes (JUnit4X uniquement, correctifs bienvenus)
mvn -Dtest=TestCircle#testOne+testTwo test
Vérifiez ceci lien sur les tests simples
Vous pouvez exécuter des classes et méthodes de test spécifiques en utilisant la syntaxe suivante:
package complet: mvn test -Dtest = "com.Oracle.tests. **"
toutes les méthodes d'une classe: mvn test -Dtest = CLASS_NAME1
méthode unique de la classe unique: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1
méthode multiple à partir de plusieurs classes: mvn test -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 test mentionné par tobrien vous permet de spécifier une méthode à l'aide d'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 le 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 include au format **/$ {test} .Java. Vous pourrez ainsi taper "-Dtest = MyTest" pour exécuter un seul test appelé "foo/MyTest.Java". Ce paramètre remplace les paramètres 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" pris en charge pour junit 4.x et testNg
À partir de la version 2.22.1 du plugin surefire (éventuellement antérieure), vous pouvez exécuter un test unique à l'aide de la propriété testnames lors de l'utilisation de testng.xml
Compte tenu d'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>
En ligne de commande
mvn clean test -DselectedTests=run-B-test
Lectures supplémentaires - plugin Maven surefire utilisant testng
Les nouvelles versions de JUnit contiennent le coureur Categories: 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 maven doivent donc le mettre manuellement dans leurs référentiels.