655 Stimmen

Wie führt man mit Gradle nur eine Einheitstestklasse aus?

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.

921voto

Maleen Abewardana Punkte 12144

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.

220voto

airborn Punkte 2507

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.

170voto

greperror Punkte 4316

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.

61voto

anagaf Punkte 2065

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)

52voto

Pratik Khadloya Punkte 11945

Nach viel Überlegung hat folgendes für mich funktioniert:

gradle test --tests "a.b.c.MyTestFile.mySingleTest"

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