Ejecución de una prueba de unidad específica con gradle
¿Existe alguna manera de ejecutar una prueba de unidad específica de Android con Gradle? He intentado
gradle -Dtest.single=UnitTestName connectedInstrumentTest
Pero parece que ejecuta todas las pruebas en el paquete.
- Cuenta de simulacro en ActivityInstrumentationTestCase2
- Prueba de unidades de Android en Eclipse: "Error al iniciar la prueba"
- ¿Cómo configurar gradle para usar logback-classic SOLAMENTE para las pruebas de unidad en Android?
- ¿Existe una manera de escribir una prueba de unidad para una API de destino
- Robolectric filenotFound en archivos de activos
Gracias de antemano, Iván.
- ¿Cómo puedo usar Active Android con una base de datos en memoria para las pruebas de unidad usando Robolectric?
- Necesito Robolectric y Mockito en mi prueba, cada uno propone su propio TestRunner
- Error en la automatización de las pruebas de interfaz de usuario de Android en Jenkins-Server debido a complejas dependencias del proyecto lib de los proyectos principales.
- Prueba de unidades de Android con ContentProviders
- Pruebas de ejecución automática antes de la compilación de aplicaciones en Android Studio
- Enviar Tecla Intro usando robotium para pruebas de Android?
- Acceso a recursos en un proyecto de prueba de Android
- Servicios Roboeléctricos y de Intención
El patrón es -D<testTaskName>.single=<TestClass>
por lo que en su ejemplo debe ser:
gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest
NOTA: Esta respuesta está obsoleta. Debe utilizar el interruptor
--tests
en las versiones más recientes de Gradle. (Ver otras respuestas para una explicación)
El uso de test.single
parece estar obsoleto. La nueva forma correcta de hacerlo es
./gradlew :<module>:test --tests <pattern>
Donde <pattern>
podría ser algo como:
-
com.example.MyTest
para ejecutar todos los métodos de prueba en com.example.MyTest -
*MyTest
para coincidir con cada método en cada clase cuyo nombre termina con MyTest -
*.MyTest.myMethod
para ejecutar un método de prueba específico en la clase MyTest en cualquier paquete
Si tiene una compilación de varios proyectos, asegúrese de dar la ruta del módulo antes de la tarea de test
; De lo contrario obtendrá un mensaje de error engañoso cuando busque su patrón de prueba en cada subproyecto.
Nada de esto está documentado en el sitio de Gradle donde pudiera encontrarlo.
Esto funciona si está utilizando un instrumentationTestRunner
:
./gradlew test -Pandroid.testInstrumentationRunnerArguments.class='<pkg>.YourClassName'
Usando gradle 2.10 y plugin androide gradle 2.0.0-beta2
Desde Android gradle plugin 1.1.0-rc1, se puede ejecutar una sola clase de prueba usando --tests
flag ejecutando:
./gradlew testDebug --tests=com.example.MyTest
Consulte http://tools.android.com/tech-docs/unit-testing-support#TOC-Running-from-Gradle
Tienes que ver esto.
https://github.com/JCAndKSolutions/android-unit-test
Hice un problema en este repositorio github, y este tipo resolvió mi problema y subir a maven, por lo que en mi archivo build.gradle uso este complemento.
Las instrucciones están escritas en su repositorio. Usted puede seguirla fácilmente.
Después de usar este plugin de prueba de unidad de android, puedo usar como
../gradlew -Dtest.single=SomeTest test
o
../gradlew -Dtest.single=SomeTest clean check
Ahora está funcionando y sólo podría ejecutar las pruebas específicas que quiero
No debe olvidarse de especificar un nombre de variante de construcción después de la declaración de propiedad de test
como
-Dtest<buildVariantName>=<yourTestName>
.
Al igual que si tiene un tipo de compilación de debug
que le da variante de debug
después de la compilación, si desea ejecutar una prueba sólo para esta variante de construcción, debe declarar un comando como este:
./gradlew -DtestDebug=UnitTestName testDebug
La respuesta de Erdi no funcionó para mí, pero tengo un padre soltero para todas mis clases de prueba, así que pude hacer esto:
public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> { //... @Override protected void runTest() throws Throwable { if(getClass().getSimpleName().equals("MyTestClassName")) { super.runTest(); } } //... }
Esto ejecuta sólo MyTestClassName
. Podemos extenderla más lejos para ejecutar solamente método (o métodos) de prueba específicos:
public abstract class BaseEspressoTest<T extends Activity> extends ActivityInstrumentationTestCase2<T> { //... @Override protected void runTest() throws Throwable { if("MyTestClassName".equals(getClass().getSimpleName()) && "testMethodName".equals(getName())) { super.runTest(); } } //... }
- ¿Qué debo pasar por la raíz al inflar una presentación para utilizarla en ActionView de MenuItem?
- ¿Puede detectar el ruido blanco mediante programación?