wake-up-neo.com

Führen Sie eine einzelne Testmethode mit maven aus

Ich weiß, dass Sie alle Tests in einer bestimmten Klasse ausführen können, indem Sie Folgendes verwenden:

mvn test -Dtest=classname

Aber ich möchte eine einzelne Methode ausführen und -Dtest = classname.methodname scheint nicht zu funktionieren.

476
BillMan

Um eine einzelne Testmethode in Maven auszuführen, müssen Sie den Befehl wie folgt bereitstellen:

mvn test -Dtest=TestCircle#xyz test

dabei ist TestCircle der Name der Testklasse und xyz die Testmethode.

Platzhalterzeichen funktionieren auch. sowohl im Methodennamen als auch im Klassennamen.

Wenn Sie in einem Projekt mit mehreren Modulen testen, geben Sie mit -pl <module-name> das Modul an, in dem sich der Test befindet.

Verwenden Sie für Integrationstests die Option it.test=... anstelle von test=...:

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
640

Es gibt ein Problem mit todsicheren 2.12. Das ist, was passiert, wenn ich das Maven-Surefire-Plugin von 2.12 auf 2.11 ändere:

  1. mvn test -Dtest=DesignRulesTest

    Ergebnis:
    [ERROR] Fehler beim Ausführen des Ziels org.Apache.maven.plugins: maven-surefire-plugin: 2.12: Test (Standard-Test) auf Projekt pmd: No Tests wurden durchgeführt!

  2. mvn test -Dtest=DesignRulesTest

    Ergebnis: [INFO] --- maven-surefire-plugin: 2.11: test (default-test) @ pmd --- ... Läuft net.sourceforge.pmd.lang.Java.rule. design.DesignRulesTest Testlauf: 5, Fehler: 0, Fehler: 0, Übersprungen: 4, Verstrichene Zeit: 4,009 Sek

25
Duccio Fabbri

Was ich mit meinem TestNG mache (sorry, JUnit unterstützt dies nicht), ist, dass ich dem Test, den ich ausführen möchte, eine Gruppe zuweisen kann

@Test(groups="broken")

Und dann einfach 'mvn -Dgroups = broken' ausführen.

16
tunaranch

Ausführen einer Reihe von Methoden in einer einzelnen Testklasse Mit Version 2.7.3 können Sie nur n Tests in einer einzelnen Testklasse ausführen.

HINWEIS: Es wird für Junit 4.x und TestNG unterstützt.

Sie müssen die folgende Syntax verwenden

mvn -Dtest=TestCircle#mytest test

Sie können auch Muster verwenden

mvn -Dtest=TestCircle#test* test

Ab surefire 2.12.1 können Sie mehrere Methoden auswählen (JUnit4X nur zu diesem Zeitpunkt, Patches willkommen).

mvn -Dtest=TestCircle#testOne+testTwo test

Überprüfen Sie dies Link zu einzelnen Tests

14

Sie können bestimmte Testklassen und Methoden mit der folgenden Syntax ausführen:

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

  2. alle Methoden in einer Klasse: mvn test -Dtest = CLASS_NAME1

  3. einzelne Methode aus einer einzelnen Klasse: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1

  4. mehrfachmethode aus mehreren Klassen: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2

9

Dieser Befehl funktioniert !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test Beachten Sie, dass "-DTest" mit UPPER CASE 'T' beginnt.

8
vikas

Mit dem von tobrien erwähnten Parameter test können Sie eine Methode mit einem # vor dem Methodennamen. Dies sollte für JUnit und TestNG funktionieren. Ich habe es noch nie ausprobiert, lies es einfach auf der Seite Surefire Plugin :

Geben Sie diesen Parameter an, um einzelne Tests anhand des Dateinamens auszuführen und die Einschluss-/Ausschlussparameter zu überschreiben. Jedes hier angegebene Muster wird verwendet, um ein Include-Muster zu erstellen, das wie **/$ {test} .Java formatiert ist. Sie können also einfach "-Dtest = MyTest" eingeben, um einen einzelnen Test mit dem Namen "foo/MyTest.Java" auszuführen. Dieser Parameter überschreibt die Einschluss-/Ausschlussparameter und den Parameter TestNG suiteXmlFiles. seit 2.7.3 Sie können eine begrenzte Anzahl von Methoden im Test ausführen, indem Sie #myMethod oder # my * ethod hinzufügen. Si-Typ "-Dtest = MyTest # myMethod" wird für junit 4.x und testNg unterstützt

4
Wesley Hartford

Ab Version 2.22.1 des todsicheren Plugins (möglicherweise früher) können Sie einen einzelnen Test mit der Eigenschaft testnames ausführen, wenn Sie testng.xml verwenden

Gegeben eine folgende testng.xml

<?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> 

mit der 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>

Von der Kommandozeile

mvn clean test -DselectedTests=run-B-test

Weiterführende Literatur - Maven todsichere Plugin mit Testng

3
bsk

Neue Versionen von JUnit enthalten den Categories-Runner: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

Da die Freigabeprozedur von JUnit jedoch nicht maven-basiert ist, müssen maven-Benutzer sie manuell in ihre Repositorys stellen.

3