Cobertura de código para Android (calabash-android BDD)

Estoy probando mi aplicación android usando calabash-android que proporciona su propio "proyecto de prueba", con un script que cambia el nombre de su paquete para reflejar la aplicación bajo prueba y, a continuación, utiliza una subclase InstrumentationTestRunner:

adb shell am instrument -w -e class sh.calaba.instrumentationbackend.InstrumentationBackend #{ENV['TEST_PACKAGE_NAME']}/sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner 

Acepto cualquier respuesta que me permita generar un informe de cobertura de código similar a Emma o Cobertura para una aplicación para Android, con datos recopilados mientras se prueba en calabash-android.

En el intento conseguir Emma que trabaja tengo …

  • Intenté seguir estas instrucciones para que Maven construyera mi proyecto (porque hace demasiado tiempo que usé hormigas). Se genera un archivo coverage.em en target/emma
  • Se ha modificado el script calabash-android, agregando " -e coverage true "
  • Cuando ejecuto calabash-android, finalmente veo "Generated coverage data to /data/data/my.project/files/coverage.ec"
  • adb -e pull /data/data/my.project/files/coverage.ec coverage.ec

… así que ahora debería ser capaz de ejecutar:

  • java -cp $ANDROID_HOME/tools/lib/emma.jar emma report -r html -in target/emma/coverage.em,coverage.ec

Pero obtengo un error:

 EMMA: processing input files... java.io.UTFDataFormatException: malformed input around byte 107 

… Así que supongo que hay algo mal con el complemento de maven de Android , y estoy tratando de averiguar cómo generar el archivo coverage.em . He corrido " android update project -p . " Y " ant emma " y " ant emma debug ", pero no encuentro coverage.em en ninguna parte

… El archivo build.xml generado parece implicar que la generación del archivo coverage.em sólo se genera cuando se ejecuta "ant emma test", pero no creo que vaya a funcionar porque la aplicación de prueba es controlada por Calabaza-androide.

En el intento de conseguir Cobertura que trabaja tengo …

  • Buscar varias formas de "cobertura android", pero no parece como si alguien ha tenido suerte.
  • Intenté configurar un perfil de cobertura en mi archivo Maven pom para instrumentar las clases, pero (en Maven 3) consigo
    • Un montón de advertencias acerca de log4j y ant teniendo "InnerClasses" atributos y que debería recompilar desde el origen
    • Un error que com.jayway.maven.plugins.android.generation2: android-maven-plugin: 3.3.0: dex "ANDROID-040-001: No se pudo ejecutar: Comando = / bin / sh -c -cd / path / A / myproject && java -jar $ ANDOID_HOME / platform-tools / lib / dx.jar –dex … "

 EXCEPTION FROM SIMULATION: local variable type mismatch: attempt to set or access a value of type java.lang.Class using a local variable of type java.lang.reflect.Type[]. This is symptomatic of .class transformation tools that ignore local variable information. 

… esta es probablemente la razón por la que nadie ha podido conseguir cobertura trabajando en Android?

El problema es que maven-android-plugin usa la versión 2.1.5320 de emma, mientras que las herramientas de Android utilizan la versión 2.0.5312. Como se discute aquí , estas dos versiones son incompatibles.

La solución consiste en utilizar una única versión entre las dos herramientas. He podido hacerlo funcionar clonando el repositorio maven-android-plugin , estableciendo la versión de dependencia de emma de nuevo a 2.0.5312, e instalándola en mi repositorio local. Asegúrese de que la dependencia de emma en su proyecto bajo prueba también es correcta y, a continuación, debe ser capaz de generar una cobertura.

La alternativa es asegurarse de que todas las herramientas están utilizando la versión más reciente. No lo he probado, pero podría funcionar si lo hace la generación de informes de maven es la versión será la misma entonces. También puede descargar la versión más reciente de emma y generar el informe utilizando el tarro de ese paquete.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.