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
…
- Espresso Android que iguala las vistas de texto dentro del padre
- Soluciones actuales para probar aplicaciones de Android
- ¿Cómo continuar una prueba de instrumentación Android después de una excepción?
- Roboelectric 3.0 fragmentos de prueba
- Gradle connectedAndroidTest devuelve "No se encontró ninguna prueba", sin embargo, el shell adb shell puede encontrar las pruebas
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é?
- ¿Cómo puedo permitir que los probadores beta / beta de las aplicaciones de Android descarguen la aplicación de forma gratuita?
- ChooserActivity no se encuentra con las pruebas Robotium mientras ChooserActivity se muestra en Nexus 5
- ¿Cómo ingresar comandos a CTS-Tradefed?
- No se puede iniciar el servicio no enlazado dentro de Android JUnit 4 instrumentado prueba
- Robolectric: probar un ListView con el patrón ViewHolder causa NullPointerException
- ¿Cómo hago que Espresso espere hasta que Data Binding haya actualizado la Vista con el modelo de datos?
- ¿Cómo probar una Actividad específica con Espresso?
- Prácticas recomendadas para la prueba de unidades de Android?
Tomó bastante tiempo pero finalmente conseguí que funcionaba. Tuve que hacer lo siguiente:
-
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' }
-
Copia los tarros de la hamaca desde aquí
-
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
-
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 🙂
- Gestionar automáticamente las respuestas http de gzip en Android
- Obtener ID para las vistas que se agregan dinámicamente