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:

Introduzca aquí la descripción de la imagen

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.

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.

  • Cómo cambiar todas las transiciones de actividad de una vez en la aplicación de Android?
  • ¿No puede instalar Android Studio Bundle? "No se puede elevar mensaje de error"
  • ¿Cómo manejar páginas web "infinitas"?
  • No se puede reemplazar el método onPostExecute () en AsyncTask Class o obtenerlo para activar
  • Compatible con aplicaciones no Ice Cream Sandwich
  • ¿Qué sucede cuando mi actividad se destruye cuando estoy usando IntentService con ResultReceiver
  • Prueba recyclerView con Espresso, cómo realizar clics o hacer afirmaciones
  • "AnalyticsReceiver no está registrado o está deshabilitado."
  • cómo determinar si una conexión a Internet está actualmente disponible y activa en un dispositivo android?
  • Android: Errores de archivo IO
  • Cómo utilizar AsyncTask clase para actualizar el progreso de copiar un archivo de otro directorio?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.