testing - unit - Cómo ejecutar solo una clase de prueba en Gradle
unit test android (5)
Después de mucho averiguar, lo siguiente funcionó para mí:
gradle test --tests "abcMyTestFile.mySingleTest"
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.
En caso de que tengas un proyecto multi-módulo:
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 ruta completa: com.xyz.b.module.TestClass.testToRun
Como aquí está interesado en 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 para 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 el b, lo que podría resultar en una falla ya que no hay nada que coincida con el patrón anterior en un módulo.
Para ejecutar una única clase de prueba, la respuesta de Airborn es buena.
Con el uso de algunas opciones de línea de comandos, que se encuentran here , 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, es compatible con 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"
}
}
Para entornos de sabor múltiple (un caso de uso común para Android), verifique esta respuesta , ya que el argumento --tests
no será compatible y obtendrá un error.
Puede realizar la gradle -Dtest.single=ClassUnderTestTest test
si desea probar una clase individual o usar gradle -Dtest.single=ClassName*Test test
como gradle -Dtest.single=ClassName*Test test
puede encontrar más ejemplos de clases de filtrado para pruebas en este enlace, sección 23.12. Prueba
Tenga en cuenta que la opción --tests puede no funcionar si tiene diferentes versiones (falla con "Opción de línea de comandos desconocida ''--tests''"). En este caso, es necesario especificar la tarea de prueba en particular (por ejemplo, ''testProdReleaseUnitTest'' en lugar de solo ''prueba'')