it-swarm.com.de

So führen Sie nur eine Testklasse auf Gradle durch

Ich bin neu bei Gradle. Ich benutze Gradle 1.10 und Ubuntu 13. 

Ich möchte wissen, ob es einen Befehl gibt, der nur eine Testklasse ausführt, ähnlich wie 'testonly' in SBT.

279
bula

Eine einzige Testklasse durchführen Airborns Antwort ist gut.

Mit einigen Befehlszeilenoptionen, die here gefunden haben, 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 unterstützt Gradle die Auswahl von Tests mit einem 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"
   }
}

Für Umgebungen mit mehreren Varianten (ein üblicher Anwendungsfall für Android): Überprüfen Sie diese Antwort , da das Argument --tests nicht unterstützt wird und Sie eine Fehlermeldung erhalten.

349

Sie können gradle -Dtest.single=ClassUnderTestTest test tun, wenn Sie einzelne Klassen testen oder regexp wie gradle -Dtest.single=ClassName*Test test verwenden möchten. Weitere Beispiele für Filterklassen für Tests finden Sie unter diesem Link Abschnitt 23.12. Prüfung

161
airborn

Falls Sie ein Multi-Modul-Projekt haben:

sagen wir, Ihre Modulstruktur ist

root-module
 -> a-module
 -> b-module

der Test (testToRun), den Sie ausführen möchten, befindet sich im B-Modul mit vollständigem Pfad: com.xyz.b.module.TestClass.testToRun

Da Sie daran interessiert sind, den Test in b-module auszuführen, sollten Sie die für b-module 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

Nun haben Sie den Punkt erreicht, an dem alle Tests in b-module ausgeführt werden. Schließlich können Sie der obigen Task 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 du rennst

./gradlew test --tests "com.xyz.b.module.TestClass.testToRun"

Es wird die Testaufgabe für Modul a und b ausgeführt, was zu Fehlern führen kann, da nichts mit dem obigen Muster in einem Modul übereinstimmt.

76
greperror

Nach langem Nachdenken funktionierte folgendes für mich:

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

22
Pratik Khadloya

Bitte beachten Sie, dass die Option --tests möglicherweise nicht funktioniert, wenn Sie unterschiedliche Flavours haben (schlägt fehl bei "Unbekannte Befehlszeilenoption '--tests') In diesem Fall müssen Sie die jeweilige Testaufgabe angeben (z. B. 'testProdReleaseUnitTest' statt nur 'test').

12
anagaf

Sie sollten versuchen, am Ende ein Sternchen (*) einzufügen.

1
mutkan

Nachfolgend finden Sie den Befehl zum Ausführen einer einzelnen Testklasse mit der Befehlszeilenoption gradlew:

gradlew.bat Connected**your bundleVariant**AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass

Beispiel für die Ausführung der Klasse com.example.TestClass mit der Variante Variant_1:

gradlew.bat ConnectedVariant_1AndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.TestClass 

Führen Sie einen einzelnen Test mit dem Namen MyTest aus:

./gradlew app:testDebug --tests=com.example.MyTest
0
kreker

In meinem Fall waren meine Eclipse-Java-Compiler-Warnungen zu hoch eingestellt, und Eclipse erkannte meine Klasse nicht als für die Ausführung gültig an. Beim Aktualisieren meiner Compilereinstellungen wurde das Problem behoben. Mehr darüber erfahren Sie hier: Annotation-Nonnull-Kann nicht aufgelöst werden

0
Greg