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.
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.
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
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.
Après avoir bien compris, ce qui suit a fonctionné pour moi:
gradle test --tests "a.b.c.MyTestFile.mySingleTest"
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").
Vous devriez essayer d’ajouter un astérisque (*) à la fin.
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
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