android - unit - Ejecutar una prueba de unidad específica con gradle
test app android (8)
¿Hay alguna manera de ejecutar una prueba de unidad de Android específica con Gradle? He intentado
gradle -Dtest.single=UnitTestName connectedInstrumentTest
pero parece ejecutar todas las pruebas en el paquete.
Gracias de antemano, Ivan.
Desde Android gradle plugin 1.1.0-rc1, uno puede ejecutar una sola clase de prueba usando --tests
flag ejecutando:
./gradlew testDebug --tests=com.example.MyTest
Ver http://tools.android.com/tech-docs/unit-testing-support#TOC-Running-from-Gradle
El patrón es -D<testTaskName>.single=<TestClass>
por lo que en su ejemplo debería ser:
gradle -DconnectedInstrumentTest.single=UnitTestName connectedInstrumentTest
NOTA: Esta respuesta no está actualizada. Debería usar el
--tests
en las últimas versiones de Gradle. (ver otras respuestas para una explicación)
El uso de test.single
parece estar en desuso. La nueva forma correcta de hacerlo es
./gradlew :<module>:test --tests <pattern>
donde <pattern>
podría ser algo así como:
-
com.example.MyTest
para ejecutar todos los métodos de prueba en com.example.MyTest -
*MyTest
para hacer coincidir todos los métodos de cada clase cuyo nombre termine 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 multiproyecto, asegúrese de proporcionar la ruta del módulo antes de la tarea de test
; de lo contrario, recibirá 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 en ningún lugar donde pueda encontrarlo.
Esto funciona si estás usando un instrumentationTestRunner
:
./gradlew test -Pandroid.testInstrumentationRunnerArguments.class=''<pkg>.YourClassName''
Uso de gradle 2.10 y Android gradle plugin 2.0.0-beta2
La respuesta de Erdi no funcionó para mí, pero tengo una madre soltera 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 solo ejecuta MyTestClassName
. Podemos extenderlo más para ejecutar solo métodos de prueba específicos (o métodos):
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();
}
}
//...
}
No debe olvidar especificar un nombre de variante de compilación después de declarar la propiedad de la test
como
-Dtest<buildVariantName>=<yourTestName>
.
Al igual que si tiene un tipo de compilación de debug
que le proporciona una variante de debug
después de la compilación, entonces, si desea ejecutar una prueba solo para esta variante de compilación, debe declarar un comando como este:
./gradlew -DtestDebug=UnitTestName testDebug
Tienes que ver esto.
https://github.com/JCAndKSolutions/android-unit-test
Hice un problema en este repositorio de github, y este tipo resolvió mi problema y lo subió a maven, así que en mi archivo build.gradle utilizo este complemento.
Las instrucciones están escritas en su repositorio. puedes seguirlo fácilmente
Después de usar este plugin android-unit-test, puedo usar
../gradlew -Dtest.single=SomeTest test
o
../gradlew -Dtest.single=SomeTest clean check
Ahora está funcionando y solo pude ejecutar las pruebas específicas que quiero
el comando Gradle no funciona para mí. Usé a continuación el comando adb mentioened. para esto necesitas construir tu apk primero.
adb shell am instrument -w -r -e paquete -e debug falso .debug.test / android.support.test.runner.AndroidJUnitRunner