Cómo ejecutar solo una clase de prueba en gradle

Soy nuevo en Gradle. Yo uso Gradle 1.10 y Ubuntu 13.

Quiero saber si hay algún comando para ejecutar solo una clase de prueba, similar a ‘testonly’ en SBT.

Para ejecutar una sola clase de prueba, la respuesta de Airborn es buena.

Con el uso de algunas opciones de línea de comando, que se encuentran aquí , simplemente puede hacer algo como esto.

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 

Desde la versión 1.10 de gradle, admite la selección de pruebas, utilizando un filtro de prueba . Por ejemplo,

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

Puede hacer gradle -Dtest.single=ClassUnderTestTest test si desea probar una sola clase o usar regexp como gradle -Dtest.single=ClassName*Test test Puede encontrar más ejemplos de clases de filtring para las pruebas bajo este enlace sección 23.12. Prueba

En caso de que tengas un proyecto de varios módulos:

digamos que su estructura de módulo es

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

y la prueba (testToRun) que está buscando ejecutar está en el módulo b, con la ruta completa: com.xyz.b.module.TestClass.testToRun

Como aquí le interesa ejecutar la prueba en el módulo b, debería ver las tareas disponibles para el módulo b.

 ./gradlew :b-module:tasks 

El comando anterior enumerará todas las tareas en el módulo b con descripción. Y, en el caso ideal, tendrá una tarea llamada prueba para ejecutar las pruebas unitarias en ese módulo.

 ./gradlew :b-module:test 

Ahora, ha llegado al punto de ejecutar todas las pruebas en el módulo b, finalmente puede pasar un parámetro a la tarea anterior para ejecutar pruebas que coincidan con el patrón de ruta determinado

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

Ahora, en lugar de esto, si corres

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

Ejecutará la tarea de prueba tanto para el módulo a como para b, lo que puede dar como resultado un error ya que no hay nada que coincida con el patrón anterior en un módulo a.

Después de pensar mucho, lo siguiente funcionó para mí:

gradle test --tests "abcMyTestFile.mySingleTest"

Tenga en cuenta que la opción –tests puede no funcionar si tiene diferentes sabores (falla con “Opción de línea de comando desconocida” –prueba ‘”). En este caso, es necesario especificar la tarea de prueba en particular (por ejemplo, ‘testProdReleaseUnitTest’ en lugar de solo ‘test’)