web-dev-qa-db-fra.com

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

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.

476
BillMan

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

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
640
Mudit Srivastava

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:

  1. 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!

  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: 5, Échecs: 0, Erreurs: 0, Sautés: 4, Temps écoulé: 4.009 sec

25
Duccio Fabbri

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'.

16
tunaranch

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

14
Prasanth Kumar Diddi

Vous pouvez exécuter des classes et méthodes de test spécifiques en utilisant la syntaxe suivante:

  1. package complet: mvn test -Dtest = "com.Oracle.tests. **"

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

  3. méthode unique de la classe unique: 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

9

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

8
vikas

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

4
Wesley Hartford

À 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

3
bsk

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.

3
Andriy Plokhotnyuk