Aplicación Android Gradle: connectedCheck ejecuta pruebas desde las dependencias

Tengo un proyecto de biblioteca que tiene sus propias pruebas. No soy responsable de este proyecto de biblioteca y no me importan sus pruebas, sin embargo, cuando ejecuto gradle :app:connectedCheck ejecuta mis pruebas pero también ejecuta las pruebas de las dependencias. ¿Hay alguna manera de prevenir esto?

Debo mencionar que mis dependencias no están dentro del módulo de la app que hablo.

EDIT: Más específicamente, el proyecto de biblioteca en el que estoy dependiendo tiene pruebas muy largas, ya que están destinados a ejecutarse en un servidor de construcción a las 2 de la mañana, por lo que estoy sentado aquí esperando a que la pintura se seque sólo para ejecutar mi muy corto Pruebas.

EDIT2: También he intentado usar Spoon. Lo tengo configurado ahora y puede ejecutar clases individuales, pero me gustaría ejecutar todo en un solo paquete. ¿Es eso posible?

EDIT3: La estructura de carpetas es insignificante, pero aquí hay un aspecto muy no detallado:

 root -some_library_project -main_project -settings.gradle 

El build.grado main_project tiene este aspecto. Debo mencionar que la cuchara no está haciendo nada, pero mis opciones están abiertas:

 buildscript{ repositories { jcenter() } dependencies{ classpath 'com.stanfy.spoon:spoon-gradle-plugin:0.10.+' } } apply plugin: 'com.android.application' apply plugin: 'spoon' android { compileSdkVersion 20 buildToolsVersion '20.0.0' defaultConfig { applicationId "com.something.main_project" minSdkVersion 17 targetSdkVersion 20 versionCode 1 versionName "1.0" testPackageName "com.something.main_project.test" testInstrumentationRunner "android.test.InstrumentationTestRunner" } signingConfigs { debug { storeFile file("debug.keystore") } release { storeFile file("release.keystore") storePassword "something" keyAlias "something" keyPassword "something" } } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug{ signingConfig signingConfigs.debug } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':some_library_project') androidTestCompile 'com.squareup.spoon:spoon-client:1.1.0' } spoon { if (project.hasProperty('spoonClassName')){ className = project.spoonClassName } } 

Tienes el complemento Spoon, pero se está ejecutando con gradle :app:connectedCheck . En primer lugar, realice estos cambios y, a continuación, ejecute con gradle spoon

Comentar androidTest.setRoot cualquier otro build.gradle otro que el paquete principal

Añada estos a build.gradle del paquete principal:

Bajo tag android

 sourceSets { //this one may not be needed. But wont hurt. androidTest.setRoot('src/androidTest') } 

Modifique la etiqueta de la spoon :

  spoon { debug = true testSizes = ['small', 'medium', 'large'] <<--- Change this to run specific test sizes if (project.hasProperty('spoonClassName')){ className = project.spoonClassName } } 

Correr

Todas las pruebas:

Cuchara gradle

Clase de prueba específica

Gradle spoon -PspoonClassName = [EL.PACKAGE.NAME]


Editar

Después de leer su edición "Edit2", veo que esto sólo especificará una determinada clase para ejecutar, y no un paquete específico. Por desgracia, no he encontrado una solución a esto, sólo un trabajo alrededor. He construido un script bash y en él he añadido mis clases para probar, así:

Paso 1: Cree un archivo en la raíz de su proyecto de Android: runAllTests.sh

Paso 2: Edite .sh para que parezca esto:

  #!/bin/sh date +%b-%dT%H.%M > timestamp.out sites="$HOME"/path/to/project/root timestamp="$(cat "$sites"/timestamp.out)" result_folder="$sites"/results destdir="$result_folder/Results-$timestamp" mkdir -p "$destdir" echo "Directory created: ${destdir##*/}" <---------- Here you start running the test ---------------> echo "Starting Master Setup" gradle spoon -PspoonClassName=com.espresso.test.MasterSetup cp -r "$sites"/app/build/spoon "$destdir"/MasterSetup echo "Results saved to MasterSetup" echo "Starting WorkoutSchedule" gradle spoon -PspoonClassName=com.espresso.test.CupcakeSchedule cp -f "$sites"/app/build/spoon "$destdir"/WorkoutSchedule echo "Results saved to WorkoutSchedule" echo "Starting Setting.test" gradle spoon -PspoonClassName=com.espresso.test.Settings cp -r "$sites"/app/build/spoon "$destdir"/Settings echo "Results saved to Settings" 

Paso 3: Dar los permisos de secuencia de comandos

  1. cd al guión
  2. Tipo chmod u+x runAllTest.sh

Así que, lo que esto hace:

  1. En primer lugar, crea un timestamp.out. Utilizo esto para poder guardar mis resultados en un archivo una y otra vez sin sobrescribir los resultados anteriores. No necesitas esta parte.

  2. A continuación, crea una carpeta de resultados en la raíz de su proyecto si aún no está allí.

  3. A continuación, creará una carpeta dentro de la carpeta de resultados denominada Results-SOME-DATE.

  4. Por último, cada prueba se ejecutará, guardando los resultados en el lugar normal de su proyecto. (Dentro de la compilación / cuchara) Una vez finalizada la prueba copiará los resultados a la carpeta de resultados y nombrará cada resultado de la prueba de manera apropiada para que sea fácil ver todas las pruebas realizadas.

NOTA: Este script fue escrito para MAC. Si su en las ventanas o cualquier otra cosa, este script puede necesitar modificaciones.


Además: Encontrará que es inconveniente abrir en cada carpeta para obtener el index.html abierto. Así que escribí este script para agregar a su bash_profile :

 function open-results () { # the browser to open up `index.html' in. browser='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' # let the user know what directory we're looking in printf "looking in %s" "$(pwd)" echo ... for paths in $(find ./ -name 'debug' -type d); do for files in $(find "$paths" -name 'index.html'); do open -a "$browser" "$files" done done echo done } 

Ahora, cd a la Results-SOME-DATE , y escriba open-results . Una vez más , esto fue escrito para bash. Puede que tenga que modificar en función de su sistema operativo. Pero la estructura debe ser la misma

Espero que esto ayude.

Si tiene una dependencia de proyecto con esta biblioteca, gradle quiere construirla y probarla, ya que ambos son el proceso habitual de creación de un proyecto java. Para evitar estas pruebas puede hacer una de estas:

  1. Como Krylez lo mencionó en su comentario, puede saltarse la tarea de prueba específica con ./gradlew connectedAndroidTest -x :mylib:connectedAndroidTest
  2. Filtrar sus pruebas en el cierre de la prueba como se explica aquí: http://www.gradle.org/docs/current/userguide/java_plugin.html#sec:java_test
  • Gradle + Retrolambda: Fatal Error: No se puede encontrar el paquete java.lang en classpath o bootclasspath
  • La ejecución de Gradle falló para la tarea 'Project: processDebugManifest'
  • Ejecutar una tarea de gradle independiente personalizada en android studio
  • Sonar, Gradle y Android devuelven 0 número
  • Obtener Android gradle plugin y checkstyle trabajando juntos / uso de la línea de comandos
  • ¿Cómo funciona la publicación de las librerías android que pueden ser importadas fácilmente por otras personas?
  • Gradle build Javadoc tarea falla con 'etiqueta desconocida: attr'
  • ¿Es obligatorio usar Gradle con Android Studio?
  • Error: org.gradle.api.internal.changedetection.state
  • Android-library con la dependencia específica de Flavors de Producto
  • Java.lang.NullPointerException (sin mensaje de error)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.