¿Cuáles son la lista de tareas que ConnectedAndroidTest ejecuta?
Quiero entender más sobre ConnectedAndroidTest Gradle tarea. Veo que se utiliza para instalar la aplicación y probar los apks y ejecutar las pruebas.
¿Pero cuáles son los pasos individuales que hace? (Tareas de gradle si las hay)
- Almacenamiento de archivos de prueba en el proyecto de prueba
- Haga clic en los límites / coordenadas
- Prueba de instrumentación de Android
- Prueba de Android con Robolectric
- ¿Cómo puedo obtener Application en espresso?
"Gradle build" parece generar el apk de la aplicación. ¿Qué tarea genera la prueba apk? ¿Y cómo (ConnectedAndroidTest) instala la aplicación y prueba apk? ¿Y cómo comienza las pruebas?
Muchas gracias.
- Prácticas recomendadas para la prueba de unidades de Android?
- Cómo cambiar el título de las actividades en attach ()
- No se pudo encontrar la información de instrumentación para: ComponentInfo {} - error intentando probar en IntelliJ con Gradle
- Tareas de prueba de gradación de Android
- ¿Cómo probar una Actividad específica con Espresso?
- Cómo probar JUnit ContentResolver.notifyChange
- ¿Cómo continuar una prueba de instrumentación Android después de una excepción?
- Prueba de aplicaciones de Android
Mi primera respuesta, por favor, sea amable;)
¿Pero cuáles son los pasos individuales que hace? (Tareas de gradle si las hay)
Así que si quieres una visión general de alto nivel de las tareas de ConnectedAndroidTest depende, sólo ejecuta ./gradlew connectedAndroidTest
o ./gradlew cAT
(sin la opción -q
) mostrará el nombre de cada tarea que cAT
depende antes de que se ejecute por sí mismo . La tarea en sí no puede tener otras tareas dentro de ella, pero puede depender de otros que vienen antes.
A partir de esta respuesta, la tarea de gradle build
es en realidad algo relacionado con java, y no es lo que es responsable de construir la prueba apk. En su lugar, es la tarea assembleAndroidTest
que viene justo antes de connectedAndroidTest
que lo hace. Usted tiene razón sobre el connectedAndroidTest
, sin embargo, en realidad instala y ejecuta el apk de prueba. Pero voy a venir a la forma en un poco. El resto de mi respuesta es más detallado de lo que es necesario para utilizar la tarea de manera eficaz, pero es útil si desea entender cómo funciona.
Algunos antecedentes
Al igual que muchas otras tareas de plug-in de gradle de Android, connectedAndroidTest es en realidad unido en algún momento de la fase de ejecución debido a las diferentes variantes de compilación (depuración, lanzamiento, sabor 1, sabor 2, etc.). Así que connectedAndroidTest
no está disponible para usted en la fase de configuración (cuando se ejecuta la mayor parte de su lógica de script de compilación). En su lugar, una vez que se ha creado, se establece como la propiedad connectedInstrumentTest
(básicamente, un campo) de la propiedad testVariants
en el objeto android
.
Como ejemplo de aclaración, si desea acceder a esta tarea para manipularla de alguna manera (tal vez agregar una Action
al final de ella), puede hacer algo como esto en su archivo build.gradle
:
android { testVariants.all { variant -> variant.connectedInstrumentTest.doLast { println "This will be executed right after our connectedInstrumentTest!" println "The name of the test type: $connectedInstrumentTest.name" println "The type of test $connectedInstrumentTest.class" } } }
Y luego ejecuta ./gradlew -q cAT
Así que aquí, estoy añadiendo una acción al final de cualquier tarea que se ha construido y asignado a la propiedad connectedInstrumentTest
, que está anidado bastante profundo en el objeto android
. Probablemente esta tarea estará connectedDebugAndroidTest
a connectedDebugAndroidTest
o algo similar.
¿Qué está haciendo la tarea?
Ahora, desde la propiedad de tipo que he puesto en la última println, podemos ver que la clase de la tarea es en realidad com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask_Decorated
. Para ser honesto, no estoy muy seguro todavía de dónde viene la parte _Decorated
, pero una búsqueda de Google para el resto del nombre de la clase nos proporciona el código fuente para la clase base de la tarea.
La Action
principal de la tarea se llama runTests()
y muestra más o menos cómo la tarea realiza lo que hace. Si sigues un poco el código fuente, encontrarás que el comando adb pm install
se utilizará para instalar el apk.
Aunque no pude encontrarlo, sospecho que en algún otro lugar se usa el comando adb shell am instrument -w com.package.name/android.support.test.runner.AndroidJUnitRunner
adb con el comando adb shell am instrument -w com.package.name/android.support.test.runner.AndroidJUnitRunner
para finalmente conducir las pruebas.
Así que espero que no fue demasiado confuso – aprendí la mayoría de esto muy recientemente por lo que algunas cosas podrían no ser el 100%. Yo sugeriría trabajar a través de los documentos de gradle, en particular, cómo crear un complemento personalizado y una tarea personalizada, y también echa un vistazo a la documentación de herramientas de plug-in de gradle de Android .
Para responder a la pregunta más general "¿cuál es la lista de tareas que la tarea <taskName>
ejecuta?", Hay dos maneras sencillas de averiguarlo para cualquier tarea determinada.
La primera es:
./gradlew tasks --all | grep <taskName>
Donde <taskName>
debe ser reemplazado con cualquier tarea que le interesa. Por ejemplo, ./gradlew tasks --all | grep connectedDebugAndroidTest
./gradlew tasks --all | grep connectedDebugAndroidTest
. Tenga en cuenta que estoy navegando a través de grep
para ahorrarme el problema de cribar manualmente la lista de todas las tareas.
La segunda es:
Utilice el complemento de árbol de tareas . Una vez aplicado, el uso se ve así:
./gradlew <taskName> taskTree
O, como generalmente lo prefiero:
./gradlew <taskName> taskTree --no-repeat -quiet
Esta última opción hace que la salida sea un poco menos desordenada.
- Obtener instancia de la actividad android.intent.category.LAUNCHER actual
- Android publicar / suscribir patrón