Usando android gradle + dagger para ejecutar instrumentTests

He comenzado a usar Android Studio y gradle recientemente para el desarrollo de Android y encontrarlo mucho mejor en general que eclipse / ant o maven. Sin embargo, recientemente he empezado a intentar implementar algún tipo de unidad y / o pruebas de integración con mi aplicación. Fui capaz de obtener pruebas básicas de trabajo utilizando el marco Espresso recientemente publicado por google. Sin embargo, tuve algunas pruebas en las que necesitaba mofarse e inyectar versiones simuladas de objetos. Utilicé la daga en el pasado para otro proyecto así que incluí la daga en mi proyecto. Sin embargo, ahora mis pruebas no se ejecutan debido al siguiente error:

gradle connectedCheck 

4.1.2 falló: La ejecución de instrumentación falló debido a 'java.lang.IllegalAccessError': EspressoApp: connectedCheck

He creado una demo simple de esto aquí: https://github.com/mwolfe38/android-espresso-dagger

Sólo clonar y luego desde la línea de comandos ejecutar: gradle connectedCheck

En lo anterior he probado las dependencias de varias maneras diferentes, originalmente así:

 dependencies { compile 'com.android.support:appcompat-v7:+' compile 'com.squareup.dagger:dagger-compiler:1.1.0' compile 'com.squareup.dagger:dagger:1.1.0' instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar', 'libs/testrunner-1.0-SNAPSHOT.jar', 'libs/testrunner-runtime-1.0-SNAPSHOT.jar') instrumentTestCompile 'org.hamcrest:hamcrest-all:1.3' instrumentTestCompile 'com.google.guava:guava:15.0' } 

Pero eso me da un error con respecto a la inicialización estática. Esto parece estar causado por algún código de inicialización estática en el marco espresso con respecto a la daga. Entonces, después de añadir las dependencias de dagger a instrumentTestCompile, obtengo el IllegalAccessError mencionado anteriormente.

¿Alguien tiene suerte incluyendo daga en su proyecto y haciendo exámenes de café?

Tomó bastante tiempo pero finalmente conseguí que funcionaba. Tuve que hacer lo siguiente:

  1. Declare mis dependencias así:

     dependencies { compile 'com.android.support:appcompat-v7:+' compile 'com.squareup.dagger:dagger-compiler:1.1.0' compile 'com.squareup.dagger:dagger:1.1.0' instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar','libs/testrunner-1.0-SNAPSHOT.jar','libs/testrunner-runtime-1.0-SNAPSHOT.jar') instrumentTestCompile files('libs/hamcrest-core-1.1.jar', 'libs/hamcrest-library-1.1.jar', 'libs/hamcrest-integration-1.1.jar') instrumentTestCompile 'com.google.guava:guava:14.0.1' } 
  2. Copia los tarros de la hamaca desde aquí

  3. Eliminar los archivos de licencia de los tarros como este (o de lo contrario obtendrá un error sobre los archivos duplicados LICENSE.txt)

     zip -d hamcrest-core-1.1.jar LICENSE.txt zip -d hamcrest-library-1.1.jar LICENSE.txt 
  4. Ejecutar gradle connectedCheck

Algunas cosas a tener en cuenta:
– Hamcrest 1.3 no funcionó para mí, tiene un error sobre un matcher faltaba – Crazy cuántos aros tuve que saltar a través de llegar aquí.
– Buena suerte para que esto funcione bien con el estudio de Android.

Ok, así que he estado lidiando con este problema durante horas, y aquí está mi solución: Poner esto en las dependencias de su build.gradle

 compile(project(':commons:statemachine')) { exclude module: 'junit' exclude module: 'json' exclude module: 'guava' } compile 'com.google.guava:guava:15.0' instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT-bundled.jar') instrumentTestCompile 'com.squareup:fest-android:1.0.+' 

Añada el frasco espresso incluido en la carpeta libs de su prueba. Ahora viene la parte importante.

Abra ese tarro incluido espresso con WinRar o equivalente y vaya a com / carpeta, a continuación, seleccione la carpeta android y eliminarlo. Ahora cierra WinRar y compila y ejecuta tu prueba 🙂

  • ¿Cómo puedo ejecutar una sola prueba con gradle android
  • Las pruebas de Android no se ejecutan en un dispositivo inferior a 5 (API 21) NoClassDefFoundError
  • Espresso 2.0 AmbiguousViewMatcherException for viewpager listviews
  • Pasando Variables a través de la línea de comandos con Spoon / Espresso (android-test-kit)
  • Robolectric: cómo probar una SherlockActivity
  • Cómo automatizar las pruebas de actualización para android
  • Espresso: No se encontraron opiniones en jerarquía que coincida con id: android: id / home
  • Prueba de instrumentación para Android - ¿Cómo recibir nueva actividad después del cambio de orientación?
  • Android - Fragmento independiente herramienta de prueba de interfaz de usuario
  • ¿Cómo usar Mockito para probar las API a lo largo de Robospice y Retrofit?
  • OnChildView y hasSiblings con Espresso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.