Ich bin neu bei Gradle. Ich benutze Gradle 1.10 und Ubuntu 13.
Ich möchte wissen, ob es einen Befehl gibt, nur eine lokale Testklasse 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, nur eine lokale Testklasse auszuführen , ähnlich wie 'testonly' in SBT.
Antworten:
Eine einzige Testklasse durchzuführen Die Antwort von Airborn ist gut.
Mit einigen Befehlszeilenoptionen, die hier zu finden sind , können Sie einfach so etwas 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 von gradle unterstützt es die Auswahl Tests, unter Verwendung eines Testfilter . Zum Beispiel,
apply plugin: 'java'
test {
filter {
//specific test method
includeTestsMatching "org.gradle.SomeTest.someSpecificFeature"
//specific test method, use wildcard for packages
includeTestsMatching "*SomeTest.someSpecificFeature"
//specific test class
includeTestsMatching "org.gradle.SomeTest"
//specific test class, wildcard for packages
includeTestsMatching "*.SomeTest"
//all classes in package, recursively
includeTestsMatching "com.gradle.tooling.*"
//all integration tests, by naming convention
includeTestsMatching "*IntegTest"
//only ui tests from integration tests, by some naming convention
includeTestsMatching "*IntegTest*ui"
}
}
Überprüfen Sie diese Antwort in Umgebungen mit mehreren Geschmacksrichtungen (ein häufiger Anwendungsfall für Android) , da das --tests
Argument nicht unterstützt wird und Sie eine Fehlermeldung erhalten.
--tests
eine einzelne Testmethode innerhalb der Klasse aufgerufen wird, eine Iteration über alle Klassen angezeigt, auch über alle nicht ausgeführten, was zu langsam ist. Ich weiß nicht, ob diese Langsamkeit auf unsere Umwelt zurückzuführen ist oder ob sie andere beeinflussen würde. Kann aktualisiert werden, wenn mehr gefunden wird.
Sie können dies tun, gradle -Dtest.single=ClassUnderTestTest test
wenn Sie eine einzelne Klasse testen oder Regexp verwenden möchten. gradle -Dtest.single=ClassName*Test test
Weitere Beispiele zum Filtern von Klassen für Tests finden Sie unter diesem Link in Abschnitt 23.12. Prüfung.
--tests
Befehlszeilenoption, die ersetzt werden soll -DtestTaskName.single
.
--test
Option können Sie das Testen auch auf eine einzelne Methode innerhalb Ihrer Testklasse beschränken. Beispiel: gradle test --tests *MyTest.someMethod
Führt nur den einzelnen Test someMethod
in Ihrer MyTest
Klasse aus. Während ich einen Testfall erstelle, führe ich normalerweise jeweils eine einzelne Methode aus, um es einfacher zu machen, mich nur auf die Ausgabe zu konzentrieren, die ich zum Debuggen benötige, und am Ende den gesamten Testfall auszuführen.
gradle -D:submodule:test.single=ClassUnderTestTest :submodule:test
. Siehe diese Diskussion auf gradle.org
--no-rebuild
Option verwenden, z. B. um gradle -D:submodule:test.single=ClassUnderTestTest --no-rebuild :submodule:test
zu verhindern, dass Abhängigkeiten neu erstellt werden, und um diesen einzelnen Test schneller auszuführen.
Falls Sie ein Projekt mit mehreren Modulen haben:
Nehmen wir an, Ihre Modulstruktur ist
root-module
-> a-module
-> b-module
und der Test (testToRun), den Sie ausführen möchten, befindet sich im b-Modul mit dem vollständigen Pfad: com.xyz.b.module.TestClass.testToRun
Da Sie hier daran interessiert sind, den Test im B-Modul auszuführen, sollten Sie die für das B-Modul verfügbaren Aufgaben sehen.
./gradlew :b-module:tasks
Der obige Befehl listet alle Aufgaben im b-Modul mit Beschreibung auf. Im Idealfall haben Sie eine Aufgabe namens test , um die Komponententests in diesem Modul auszuführen.
./gradlew :b-module:test
Nachdem Sie den Punkt für die Ausführung aller Tests im b-Modul erreicht haben, können Sie der obigen Aufgabe einen Parameter übergeben, um Tests auszuführen, die dem bestimmten Pfadmuster entsprechen
./gradlew :b-module:test --tests "com.xyz.b.module.TestClass.testToRun"
Jetzt stattdessen, wenn Sie laufen
./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"
Es wird die Testaufgabe für Modul a und b ausgeführt, was zu einem Fehler führen kann, da in einem Modul nichts mit dem obigen Muster übereinstimmt.
./gradlew :b-module:test --tests testToRun
Nachdem ich viel herausgefunden hatte, funktionierte Folgendes für mich:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
Bitte beachten Sie, dass diese --tests
Option möglicherweise nicht funktioniert, wenn Sie einen anderen Build haben types/flavors
(schlägt mit fehl Unknown command-line option '--tests'
). In diesem Fall muss die jeweilige Testaufgabe angegeben werden (z. B. testProdReleaseUnitTest
statt nur test
).
./gradlew test --tests *testMyCollectionTake*
und ich kann nicht sagen, wie ich ihn durch test
den
Unten finden Sie den Befehl zum Ausführen einer einzelnen Testklasse mithilfe der gradlew
Befehlszeilenoption:
gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
Unteres Beispiel zum Ausführen einer Klasse com.example.TestClass
mit Variante Variant_1
:
gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass
In meinem Fall waren meine Eclipse-Java-Compiler-Warnungen zu hoch eingestellt, und Eclipse hat meine Klasse nicht als für die Ausführung gültig erkannt. Das Aktualisieren meiner Compilereinstellungen hat das Problem behoben. Sie können hier mehr darüber lesen: Annotation-nonnull-kann-nicht-aufgelöst werden