Pruebas de unidad de Android: no hay ninguna propiedad de este tipo: bootClasspath

Estoy tratando de ejecutar un caso de prueba simple para Android después de anunciar el soporte de prueba de unidad – http://tools.android.com/tech-docs/unit-testing-support

Después de seguir cuidadosamente el tutorial, estoy intentando ejecutar la ./gradlew test . Estoy recibiendo este error:

 Execution failed for task ':app:compileDebugGroovy'. > No such property: bootClasspath for class: com.android.build.gradle.AppPlugin 

Mientras usa com.android.tools.build:gradle:1.1.0-rc1 .

¿Alguien se ha quedado atascado en eso?

El problema es que Groovy Android Gradle plugin (para tener Groovy trabajando en Android) no es simplemente trabajar con Android plugin en la versión 1.1.0-rcX .

Aquí está una pieza muy interesante de código directamente de groovyx.grooid.GroovyAndroidPlugin , versión 0.3.5 (actual más reciente, aquí está la fuente )

  def getRuntimeJars(Project project, plugin) { int index switch (getAndroidPluginVersion(project)) { case ~/0\.9\..*/: index = 0 break case ~/0\.10\..*/: case ~/0\.11\..*/: case ~/0\.12\..*/: case ~/0\.13\..*/: case ~/0\.14\..*/: case ~/1\.0\..*/: index = 1 break default: index = RUNTIMEJARS_COMPAT.size()-1 } def fun = RUNTIMEJARS_COMPAT[index] fun(plugin) } 

Y definición de RUNTIMEJARS_COMPAT :

 private static List RUNTIMEJARS_COMPAT = [ { it.runtimeJars }, { it.bootClasspath } ] 

Así que la API debe haber cambiado en Android Gradle entre 0.9.x 0.10.0 (sí, ya sé – los devs de Google cambian todo lo que allí: []. Así que vamos a echar un vistazo a ese problema haciendo la clase en Android Plugin versión 1.0.0 :

 > javap -cp [path to proper jar] com.android.build.gradle.AppPlugin: public class com.android.build.gradle.AppPlugin extends com.android.build.gradle.BasePlugin implements org.gradle.api.Plugin<org.gradle.api.Project> { ... public java.util.List super$2$getBootClasspath(); ... 

¡Sip! Hay el método que necesitamos (procedente de la clase parent com.android.build.gradle.BasePlugin ). Ahora no hay nada como eso en la versión 1.1.0-rc3 . Lo que es más, la API de com.android.build.gradle.AppPlugin está completamente cambiado, por lo que no es una cuestión de if(version) para solucionar eso.

Supongo que no hay posibilidad de que Groovy Android Gradle plugin de trabajo con las pruebas de unidad (desde 1.1.0 ) hasta que los autores actualizar el complemento.

Esperemos entonces.

Esa característica de prueba de soporte es experimental. Dicho esto, tal vez no hay una solución rápida a su problema o puede ser un error.

Sin embargo, me gustaría profundizar en esto, leyendo el mensaje: Esta línea de Execution failed for task ':app:compileDebugGroovy'. Menciona la tarea, así que iría a calcular lo que hace esa tarea. Supongo que es una tarea entregada. El error es que en esa tarea hay una propiedad que falta > No such property: bootClasspath for class: com.android.build.gradle.AppPlugin

Así que tal vez trate de encontrar esa tarea y asegúrese de que la propiedad bootClasspath está establecida para la clase AppPlugin.

Intente actualizar a la nueva versión ( RC3 )

 dependencies { classpath 'com.android.tools.build:gradle:1.1.0-rc3' // .. } 

También puede echar un vistazo aquí para comparar su configuración actual con un ejemplo de trabajo.

  • Añadir dependencia gradle para dar soporte a android.util.ArrayMap
  • Twitter Tela no se instala en Android Studio debido a las dependencias que faltan
  • Android Studio: migrar complejo build.xml a build.gradle
  • ¿Es posible tener archivos de origen personalizados por variante de compilación en Android Gradle?
  • ¿Depurar un proyecto Java basado en gradle en Android Studio?
  • Cómo convertir un proyecto de gradle en un proyecto de android
  • Dónde colocar la directiva de complemento de aplicar Crashlytics en archivos de compilación de Gradle
  • Target Fire TV, Android y Android TV con Gradle
  • AndroidManifest.xml para Gradle instrumentTest
  • Android Studio no puede depurar con error org.gradle.process.internal.ExecException
  • Gradle devuelve el paquete no existe
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.