Ejecución de pruebas de instrumentación desde un paquete específico mediante un complemento de cuchara-gradle
Estoy usando spoon-gradle-plugin de Roman Mazur. Soy capaz de ejecutar todas las pruebas a la vez, pero tengo problemas para especificar "grupo" de pruebas que me gustaría iniciar. Actualmente mi configuración de la cuchara se parece a eso:
spoon { debug = true baseOutputDir = file("$buildDir/spoon-log") if (project.hasProperty('spoonClassName')) { className = project.spoonClassName if (project.hasProperty('spoonMethodName')) { methodName = project.spoonMethodName } } adbTimeout = 60 * 60; }
Mis pruebas se encuentran en paquetes:
- ¿Pausar y reanudar AsyncTasks? (Androide)
- Autenticación HTTP básica en los teléfonos Android a Rails Server
- Cuándo y cómo implementar Parcelable Vs. Serializable?
- Android Studio que agrega la biblioteca de rxjava
- El título de la barra de aplicaciones no se muestra en android 5.0 y superior
Y mi objetivo es crear tareas separadas gradle que dependen de la cuchara para lanzar las pruebas de cada paquete por separado. Roman nos dio instrumentationArgs parámetro que debería ser capaz de editar algunas propiedades dentro de la cuchara.
Como puedo ver en el git principal de la cuchara hay escrito que se puede especificar el paquete, donde spoon-runner debe buscar sus pruebas y el ejemplo es así:
--e package=com.mypackage.unit_tests
Así que mi idea era poner esta propiedad en instrumentationArgs. En consecuencia, creé mis tareas como cuchara:
task spoonAuthFlowTests(type: GradleBuild, dependsOn: ['spoon']) { spoon { instrumentationArgs = ["package=com.myapp.instrumentation.flowtests.AuthFlowTests"] noAnimations = true; } } task spoonFlowTests(type: GradleBuild, dependsOn: ['spoon']) { spoon { instrumentationArgs = ["package=com.myapp.instrumentation.flowtests"] noAnimations = true; } }
¿Qué puedo decir es que el parámetro noAnimations está ampliando la configuración de spoon por defecto, evitando la creación de gifs. Así que instrumentationArgs es seguro tomar mi matriz de cadena, pero no aplica el cambio porque en mi terminal:
2016-01-08 15:13:10 [SDR.run] About to actually run tests for [04ffe19ad317d2e7] 03:13:10 I/RemoteAndroidTest: Running am instrument -w -r -e package com.myapp.instrumentation.flowtests -e class com.myapp.instrumentation.flowtests.AuthFlowTests.LoginUserFlowTests com.myapp.debug1.test/com.myapp.instrumentation.helper.runner.MyAppTestRunner on lge-nexus_4-04ffe19ad317d2e7
No mather lo que hago con la propiedad "paquete", siempre recibir resultados:
-e package com.myapp.instrumentation.flowtests
Y quiero cambiarlo, pero no sé cómo. Además puedo decir que traté de buscar en mi proyecto "com.myapp.instrumentation.flowtests" cadena y las únicas ubicaciones donde se utiliza son: pruebas en paquete + gradle tareas presentadas anteriormente. Así que no está codificado en ningún lugar. La misma ubicación es escogida si empiezo las pruebas por:
./gradlew spoon
Y después de usar:
./gradlew spoonAuthFlowTests
También ejecuta conjunto de pruebas completo.
- Cómo leer / interceptar mensaje USSD que viene en el teléfono Android
- Android: Google reproduce los servicios de juegos error de conexión (java.lang.IllegalStateException: GoogleApiClient debe estar conectado.)
- ¿Cómo puedo mostrar la imagen en la aplicación de Android
- getApplicationContext () devuelve null, pero funciona en otras actividades
- Actualización de Android Studio 2.0 - public static volatile com.android.tools.fd.runtime.IncrementalChange
- ¿Cómo puedo cambiar el comportamiento del modo de avión de Android para que no apague la radio celular?
- ¿Cómo emular el efecto Vinyl Scratch en el procesamiento de audio?
- Comprobar si la notificación de mi aplicación se está ejecutando
Su problema es que interpreta incorrectamente cómo funciona el bloque de spoon
en su config de Gradle. Cuando escribes algo como
spoon { debug = true }
Básicamente, modifica un objeto singleton asociado con su proyecto Gradle. Este proyecto contiene una configuración compartida entre todas las tareas creadas por el complemento de cuchara. El complemento Spoon crea tareas separadas para diferentes sabores definidos en su proyecto (para que pueda ejecutar pruebas para cada sabor por separado). También hay tareas como spoonSmall
, spoonMedium
para ejecutar pruebas anotadas con @Small
o @Medium
solamente. Todas estas tareas utilizan el mismo objeto de configuración que se altera con spoon {}
.
Por lo tanto, cuando llama a spoon {}
dentro de las definiciones de tareas, simplemente anula los valores existentes. Y se aplican los últimos valores.
Si desea crear una tarea de cuchara personalizada, debe escribir algo como
import com.stanfy.spoon.gradle.SpoonRunTask task spoonAuthFlowTests(type: SpoonRunTask) { instrumentationArgs = ['package=com.myapp.instrumentation.flowtests.AuthFlowTests'] // But you will have to set many other options on the tasks, // like instrumentationApk and applicationApk files. }
Puede ver todas las propiedades de las tareas en las fuentes de SpoonRunTask . La mayoría de ellos se establecen desde ese único objeto de configuración por el complemento cuando crea sus tareas.
Si esto suena demasiado complicado, puede elegir una forma diferente. Configure sus argumentos utilizando las propiedades del proyecto que se pueden definir en la línea de comandos.
spoon { instrumentationArgs = ["package=${project.getProperty('spoonPackage')}"] noAnimations = true; }
Ahora puedes correr
./gradlew spoon -PspoonPackage=com.myapp.instrumentation.flowtests
Así que en lugar de especificar diferentes tareas en la línea de comandos, se especificarán las diferentes propiedades del proyecto.
La desventaja es que no podrás ejecutar pruebas para 2 paquetes con una invocación de gradle. Tendrás que llamar dos veces con valores diferentes.
- Android Studio 2.2 Error NullPointerException
- Problema con bluetooth en android 2.1 (samsung spica i5700) donde el emparejamiento funciona, pero la conexión no funciona