696 Stimmen

Führen Sie eine einzelne Testmethode mit Maven aus

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

mvn test -Dtest=Klassenname

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

3 Stimmen

Ich wäre auch daran interessiert zu wissen, wie man dies macht. Wenn ich es jedoch recht oft mache, denke ich, dass der Test möglicherweise ein Kandidat für eine eigene Klasse ist, sodass du die Syntax mvn test -Dtest=classname verwenden kannst.

0 Stimmen

Möchtest du wissen, wie man es nur über die Befehlszeile macht?? Oder würde es für dich funktionieren, ein IDE (Eclipse) zu verwenden?

1 Stimmen

Ich habe mir eine Befehlszeile angeschaut. Ich denke, das JUnit Eclipse-Plugin wird es Ihnen ermöglichen, dies zu tun.

930voto

Mudit Srivastava Punkte 8816

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

mvn test -Dtest=TestCircle#xyz test

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

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

Wenn Sie in einem Multi-Modul-Projekt testen, geben Sie das Modul, in dem der Test stattfindet, mit -pl an.

Für Integrationstests verwenden Sie die Option it.test=... anstelle von test=...:

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

0 Stimmen

Ich wünschte, es gäbe eine Möglichkeit, Antworten zusammenzuführen ... das ist richtig, aber der Link, von dem es genommen wurde, befindet sich in einem anderen Beitrag: maven.apache.org/plugins/maven-surefire-plugin/examples/…

0 Stimmen

Ich habe mich gefragt, ob der Klassenname ein vollqualifizierter Klassenname mit Paketnamen sein sollte, und die Antwort ist, dass, obwohl ein vollqualifizierter Name funktioniert, auch nur der Klassenname funktioniert, Maven sucht die Klasse für Sie. Ich vermute, dass es bei mehrdeutigem Namen einen Fehler gibt.

4 Stimmen

Behoben den Fehler "Es wurden keine Tests ausgeführt" durch Downgrading auf Surefire 2.9

35voto

Duccio Fabbri Punkte 966

Es gibt ein Problem mit Surefire 2.12. Das ist passiert, als ich das maven-surefire-plugin von 2.12 auf 2.11 geändert habe:

  1. mvn test -Dtest=DesignRulesTest

    Ergebnis:
    [ERROR] Fehler bei der Ausführung des Ziels org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test) im Projekt pmd: Keine Tests wurden ausgeführt!

  2. mvn test -Dtest=DesignRulesTest

    Ergebnis: [INFO] --- maven-surefire-plugin:2.11:test (default-test) @ pmd --- ... Führe net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest aus Tests durchgeführt: 5, Fehler: 0, Fehler: 0, Übersprungen: 4, Zeit vergangen: 4.009 Sekunden

6 Stimmen

Funktioniert wieder in 2.12.1 oder später.

0 Stimmen

Behoben "Es wurden keine Tests ausgeführt!" durch ein Upgrade auf 2.14

1 Stimmen

Wenn Sie @Category(IntegrationTest.class) verwenden, verwenden Sie -Dit.test=Klassenname, sonst erhalten Sie auch bei den neuesten Plugin-Versionen die Meldung Es wurden keine Tests ausgeführt!.

22voto

Yatendra Punkte 32428

Führen Sie eine einzelne Testmethode aus einer Testklasse aus.

mvn test -Dtest=Test1#methodname


Weitere verwandte Anwendungsfälle

  • mvn test // Führen Sie alle Unit-Testklassen aus

  • mvn test -Dtest=Test1 // Führen Sie eine einzelne Testklasse aus

  • mvn test -Dtest=Test1,Test2 // Führen Sie mehrere Testklassen aus

  • mvn test -Dtest=Test1#testFoo* // Führen Sie alle Testmethoden aus, die dem Muster 'testFoo*' aus einer Testklasse entsprechen.

  • mvn test -Dtest=Test1#testFoo*+testBar* // Führen Sie alle Testmethoden aus, die dem Muster 'testFoo*' und 'testBar*' aus einer Testklasse entsprechen.

0 Stimmen

Hervorragende Lösung

18voto

tunaranch Punkte 1555

Was ich mit meinen TestNG-(Entschuldigung, JUnit unterstützt das nicht) Testfällen mache, ist, dass ich einer Gruppe den Test zuweise, den ich ausführen möchte.

@Test(groups="broken")

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

1 Stimmen

Dies ist eine gute Antwort. In meinem Fall versuchte der Test, ausgeführt zu werden, aber einige Seam-Komponenten waren nicht ordnungsgemäß eingerichtet, sodass anscheinend einige Teile des Setup-Codes übersprungen werden.

1 Stimmen

Richtig. Du musst entweder groups=broken in deinem @BeforeMethod hinzufügen oder @BeforeMethod(alwaysRun=true) verwenden.

0 Stimmen

Bitte lassen Sie mich wissen, was hier gruppiert ist, da ich ein Kompilierungsproblem habe.

17voto

Fü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: Dies 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 (nur JUnit4X zu diesem Zeitpunkt, Patches sind willkommen)

mvn -Dtest=TestCircle#testOne+testTwo test

Überprüfen Sie diesen Link zu einzelnen Tests

3 Stimmen

In meinem Fall musste ich den Testnamen TestClass#test in Anführungszeichen setzen, wie zum Beispiel mvn -Dtest="TestCircle#myTest" test

0 Stimmen

@PratikKhadloya Hast du eine Ahnung, wie das für abhängige Tests funktioniert? Angenommen, ich habe die Methoden test1(), test2(), test3() in der TestClass und test2 hängt von test1 ab. Wie kann ich nur test2 ausführen?

5 Stimmen

Ich denke, wenn Sie Abhängigkeiten zwischen Ihren Tests haben, machen Sie etwas falsch. Jeder Test sollte unabhängig von anderen Tests sein. Sie müssen die Kopplung zwischen ihnen entfernen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X