Codeabdeckung für Android (Calabash-Android BDD)

Ich teste meine Android-Anwendung mitKalebasse-Android Dies bietet ein eigenes "Testprojekt" mit einem Skript, das das Paket umbenennt, um die zu testende App wiederzugeben. Anschließend wird eine InstrumentationTestRunner-Unterklasse verwendet:

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

Ich akzeptiere jede Antwort, die es mir ermöglicht, einen Bericht zur Codeabdeckung ähnlich wie Emma oder Cobertura für eine Android-App zu generieren, wobei Daten gesammelt werden, während sie in Calabash-Android getestet werden.

Um Emma zum Laufen zu bringen, habe ich ...Versuchte zu folgendiese Anweisungen um Maven dazu zu bringen, mein Projekt zu erstellen (weil es zu lange her ist, seit ich ant verwendet habe). EINcoverage.em Datei wird in generierttarget/emmaDas Calabash-Android-Skript wurde geändert und "-e coverage true"Wenn ich calabash-android starte, wird schließlich "Generierte Coverage-Daten in /data/data/my.project/files/coverage.ec" angezeigt.adb -e pull /data/data/my.project/files/coverage.ec coverage.ec

... also sollte ich jetzt laufen können:

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

aber Ich erhalte einen Fehler:

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

Ich gehe also davon aus, dass mit dem etwas nicht stimmtandroid maven pluginund ich versuche herauszufinden, wie man das erzeugtcoverage.em Datei. Ich bin gelaufen "android update project -p ." und "ant emma" und "ant emma debug", aberIch kann Coverage.em nirgendwo finden...

... Die generierte build.xml-Datei scheint zu implizieren, dass die Generierung der coverage.em-Datei nur generiert wird, wenn Sie "ant emma test" ausführen, aber ich glaube nicht, dass dies funktionieren wird, da die Test-App von gesteuert wird Kalebasse-Android.

Um Cobertura zum Laufen zu bringen, habe ich ...Googelte verschiedene Formen von "Cobertura android", aber es scheint nicht, als ob jemand Glück gehabt hätte.Ich habe versucht, ein Cobertura-Profil in meiner Maven-POM-Datei zu konfigurieren, um die Klassen zu instrumentieren, aber (in Maven 3) bekomme ichEine ganze Menge Warnungen, dass log4j und ant "InnerClasses" -Attribute haben und dass ich sie aus dem Quellcode neu kompilieren sollteein Fehler, der com.jayway.maven.plugins.android.generation2: android-maven-plugin: 3.3.0: dex "ANDROID-040-001: Konnte nicht ausgeführt werden: Befehl = / bin / sh -c -cd / path / zu / 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.

... das ist wahrscheinlich der Grund, warum niemand Cobertura auf Android zum Laufen bringen konnte?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage