Ich bin neu bei Gradle. Ich benutze Gradle 1.10 und Ubuntu 13.
Ich möchte wissen, ob es einen Befehl gibt, um nur eine Einheitstestklasse auszuführen, ähnlich wie testOnly
in SBT.
Ich bin neu bei Gradle. Ich benutze Gradle 1.10 und Ubuntu 13.
Ich möchte wissen, ob es einen Befehl gibt, um nur eine Einheitstestklasse auszuführen, ähnlich wie testOnly
in SBT.
Um eine einzelne Testklasse auszuführen, ist die Antwort von Airborn gut.
Mit Hilfe einiger Befehlszeilenoptionen, die hier gefunden werden können, können Sie einfach etwas wie folgt tun.
gradle test --tests org.gradle.SomeTest.someSpecificFeature
gradle test --tests '*SomeTest.someSpecificFeature'
gradle test --tests '*SomeSpecificTest'
gradle test --tests 'all.in.specific.package*'
gradle test --tests '*IntegTest'
gradle test --tests '*IntegTest*ui*'
gradle test --tests '*IntegTest.singleMethod'
gradle someTestTask --tests '*UiTest' someOtherTestTask --tests '*WebTest*ui'
Ab Version 1.10 unterstützt Gradle die Auswahl von Tests unter Verwendung eines Testfilters. Zum Beispiel,
apply plugin: 'java'
test {
filter {
//spezifische Testmethode
includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"
//spezifische Testmethode, Wildcard für Pakete verwenden
includeTestsMatching "*SomeTest.someSpecificFeature"
//spezifische Testklasse
includeTestsMatching "org.gradle.SomeTest"
//spezifische Testklasse, Wildcard für Pakete
includeTestsMatching "*.SomeTest"
//alle Klassen im Paket, rekursiv
includeTestsMatching "com.gradle.tooling.*"
//alle Integrationstests, nach Namenskonvention
includeTestsMatching "*IntegTest"
//nur UI-Tests aus Integrationstests, nach bestimmter Namenskonvention
includeTestsMatching "*IntegTest*ui"
}
}
Für Umgebungen mit mehreren Varianten (ein häufiger Anwendungsfall für Android), überprüfen Sie diese Antwort, da das --tests
-Argument nicht unterstützt wird und Sie einen Fehler erhalten werden.
In Versionen von Gradle vor 5 kann die test.single
-Systemeigenschaft verwendet werden, um einen einzelnen Test anzugeben.
Sie können gradle -Dtest.single=KlasseUnterTest test
verwenden, wenn Sie nur eine Klasse testen möchten, oder ein Regex wie gradle -Dtest.single=Klassenname*Test test
verwenden. Weitere Beispiele zum Filtern von Klassen für Tests finden Sie unter diesem Link.
Gradle 5 hat diese Option entfernt, da sie durch die Verwendung der Testfilterung mit der --tests
-Befehlszeilenoption abgelöst wurde.
Falls Sie ein Multi-Modul-Projekt haben:
nehmen wir an, Ihre Modulstruktur ist
root-modul
-> a-modul
-> b-modul
und der Test (testToRun), den Sie ausführen möchten, befindet sich im b-Modul, mit dem vollständigen Pfad: com.xyz.b.modul.TestClass.testToRun
Da Sie hier daran interessiert sind, den Test im b-Modul auszuführen, sollten Sie die verfügbaren Aufgaben für das b-Modul anzeigen.
./gradlew :b-modul:aufgaben
Der obige Befehl listet alle Aufgaben im b-Modul mit Beschreibung auf. Und im Idealfall haben Sie eine Aufgabe mit dem Namen test um die Unittests in diesem Modul auszuführen.
./gradlew :b-modul:test
Jetzt sind Sie an dem Punkt angelangt, an dem Sie alle Tests im b-Modul ausführen können. Schließlich können Sie einen Parameter an die obige Aufgabe übergeben, um Tests auszuführen, die dem bestimmten Pfadmuster entsprechen.
./gradlew :b-modul:test --tests "com.xyz.b.modul.TestClass.testToRun"
Statt dessen, wenn Sie ausführen
./gradlew test --tests "com.xyz.b.modul.TestClass.testToRun"
Es wird die Testaufgabe für beide Module a und b ausführen, was möglicherweise zu einem Fehler führt, da nichts dem oben genannten Muster im a-Modul entspricht.
Bitte beachten Sie, dass die --tests
-Option möglicherweise nicht funktioniert, wenn Sie verschiedene Build-Typen/Varianten
haben (schlägt fehl mit Unbekannte Befehlszeilenoption '--tests'
). In diesem Fall ist es erforderlich, die spezielle Testaufgabe anzugeben (z.B. testProdReleaseUnitTest
anstatt nur test
)
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.