web-dev-qa-db-fra.com

Comment faire pour exécuter un seul test sur gradle

Je suis nouveau à Gradle. J'utilise Gradle 1.10 et Ubuntu 13. 

Je veux savoir s'il existe une commande pour exécuter une seule classe de test, similaire à 'testonly' dans SBT.

279
bula

Pour exécuter un seul test, la réponse d'Airborn est bonne.

En utilisant certaines options de ligne de commande, qui ont trouvé ici , vous pouvez simplement faire quelque chose comme ceci.

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

A partir de la version 1.10 de gradle, il prend en charge la sélection des tests, en utilisant un filtre test . Par exemple,

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"
   }
}

Pour les environnements multi-saveurs (cas d'utilisation courant pour Android), cochez cette réponse , car l'argument --tests ne sera pas pris en charge et vous obtiendrez une erreur.

349
Maleen Abewardana

Vous pouvez faire gradle -Dtest.single=ClassUnderTestTest test si vous voulez tester une classe unique ou utiliser regexp comme gradle -Dtest.single=ClassName*Test test, vous trouverez d'autres exemples de classes filtrantes pour les tests sous ce lien section 23.12. Tester

161
airborn

Si vous avez un projet multi-module:

disons que votre structure de module est

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

et le test (testToRun) que vous souhaitez exécuter se trouve dans le b-module, avec le chemin complet: com.xyz.b.module.TestClass.testToRun

Comme ici, vous êtes intéressé pour exécuter le test dans b-module, vous devriez donc voir les tâches disponibles pour b-module.

./gradlew :b-module:tasks

La commande ci-dessus listera toutes les tâches dans le b-module avec une description. Et dans le cas idéal, vous aurez une tâche nommée test pour exécuter les tests unitaires dans ce module.

./gradlew :b-module:test

Maintenant que vous avez atteint le point d'exécuter tous les tests dans b-module, vous pouvez enfin passer un paramètre à la tâche ci-dessus pour exécuter des tests correspondant au modèle de chemin défini.

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

Maintenant, au lieu de cela si vous exécutez

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

Il exécutera la tâche de test pour les modules a et b, ce qui pourrait entraîner une défaillance, car rien ne correspond au modèle ci-dessus dans a-module.

76
greperror

Après avoir bien compris, ce qui suit a fonctionné pour moi:

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

22
Pratik Khadloya

Veuillez noter que l'option --tests peut ne pas fonctionner si vous avez différentes variantes (échec avec "Option de ligne de commande inconnue '--tests'"). Dans ce cas, il est nécessaire de spécifier la tâche de test particulière (par exemple, "testProdReleaseUnitTest" au lieu de "test").

12
anagaf

Vous devriez essayer d’ajouter un astérisque (*) à la fin.

1
mutkan

Vous trouverez ci-dessous la commande permettant d'exécuter une seule classe de test à l'aide de l'option de ligne de commande gradlew

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

Exemple ci-dessous pour exécuter la classe com.example.TestClass avec la variante Variant_1:

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

Exécutez un seul test appelé MyTest:

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

Dans mon cas, les avertissements de mon compilateur Eclipse Java étaient trop élevés et Eclipse ne reconnaissait pas que ma classe était valide pour l'exécution. La mise à jour des paramètres de mon compilateur a résolu le problème. Vous pouvez en savoir plus à ce sujet ici: annotation-nonnull-ne-peut-pas être-résolu

0
Greg