Ich weiß, dass Sie alle Tests in einer bestimmten Klasse ausführen können, indem Sie:
mvn test -Dtest=classname
Aber ich möchte eine einzelne Methode ausführen und -Dtest = classname.methodname scheint nicht zu funktionieren.
Ich weiß, dass Sie alle Tests in einer bestimmten Klasse ausführen können, indem Sie:
mvn test -Dtest=classname
Aber ich möchte eine einzelne Methode ausführen und -Dtest = classname.methodname scheint nicht zu funktionieren.
Antworten:
Um eine einzelne Testmethode in Maven auszuführen, müssen Sie den folgenden Befehl eingeben:
mvn test -Dtest=TestCircle#xyz test
Wo TestCircle
ist der Name xyz
der Testklasse und ist die Testmethode.
Platzhalterzeichen funktionieren ebenfalls. sowohl im Methodennamen als auch im Klassennamen.
Wenn Sie in einem Projekt mit mehreren Modulen testen, geben Sie das Modul an, in dem sich der Test befindet -pl <module-name>
.
Verwenden Sie für Integrationstests die it.test=...
Option anstelle von test=...
:
mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test
-pl <module-name>
.
-DfailIfNoTests=false
diese Option, um Projekte ohne Test zu überspringen. No Tests Were Executed
Dies passiert, wenn Sie versuchen, einen Test aus dem Root-Projekt auszuführen, und es Module gibt, die überhaupt keine Tests haben.
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Beachten Sie, dass "-DTest" mit UPPER CASE 'T' beginnt.
Es gibt ein Problem mit todsicheren 2.12. Das passiert mir, wenn ich das Maven-Surefire-Plugin von 2.12 auf 2.11 ändere:
mvn test -Dtest=DesignRulesTest
Ergebnis:
[FEHLER] Fehler beim Ausführen des Ziels org.apache.maven.plugins: maven-surefire-plugin: 2.12 : Test (Standardtest) für Projekt pmd: Es wurden keine Tests ausgeführt!
mvn test -Dtest=DesignRulesTest
Ergebnis: [INFO] --- Maven-Surefire-Plugin: 2.11 : Test (Standardtest) @ pmd --- ... Ausführen von net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest Testlauf: 5 , Fehler: 0, Fehler: 0, Übersprungen: 4, Verstrichene Zeit: 4,009 Sek
@Category(IntegrationTest.class)
, verwenden Sie -Dit.test=ClassName
, sonst erhalten Sie No tests were executed!
auch mit den neuesten Plugin-Versionen.
Was ich mit meinen TestNG-Testfällen 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 = kaputt' ausführen.
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 todsicherer 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 diesen Link zu einzelnen Tests
Sie können bestimmte Testklassen und Methoden mit der folgenden Syntax ausführen:
vollständiges Paket: mvn test -Dtest = "com.oracle.tests. **"
Alle Methoden in einer Klasse: mvn test -Dtest = CLASS_NAME1
Einzelmethode aus einer Klasse: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1
Mehrfachmethode aus mehreren Klassen: mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2
Dieser Befehl funktioniert !!
mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test
Beachten Sie, dass "-DTest" mit UPPER CASE 'T' beginnt.
Die Testparameter von tobrien erwähnt können Sie eine Methode angeben , unter Verwendung eines # vor dem Methodennamen. Dies sollte für JUnit und TestNG funktionieren. Ich habe es noch nie versucht, lies es einfach auf der Surefire Plugin Seite :
Geben Sie diesen Parameter an, um einzelne Tests nach Dateinamen auszuführen, wobei die Einschluss- / Ausschlussparameter überschrieben werden. 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
Neue Versionen von JUnit enthalten den Categories Runner: http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html
Das Freigabeverfahren von JUnit basiert jedoch nicht auf Maven, sodass Maven-Benutzer es manuell in ihre Repositorys stellen müssen.
Ab der Version 2.22.1 des todsicheren Plugins (möglicherweise früher) können Sie bei Verwendung von testng.xml einen einzelnen Test mit der Eigenschaft testnames ausführen
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 todsicheres Plugin mit testng
Sie können eine einzelne Testklasse ausführen, jedoch keine einzelne Methode innerhalb einer Testklasse. Sie verwenden den einfachen Namen der Klasse, nicht den vollständig qualifizierten Namen der Klasse. Wenn Sie also einen Test in "org.sonatype.test.MyTest" haben und dies der einzige Test ist, den Sie ausführen möchten, sieht Ihre Befehlszeile folgendermaßen aus:
mvn test -Dtest=MyTest
Meines Wissens bietet das todsichere Plugin keine Möglichkeit, dies zu tun. Aber zögern Sie nicht, eine Ausgabe zu eröffnen :)
mvn test -Dtest=classname
Syntax verwenden können.