Android代码覆盖率(葫芦Android BDD)

Android代码覆盖率(葫芦Android BDD),android,code-coverage,cobertura,emma,Android,Code Coverage,Cobertura,Emma,我正在使用android应用程序测试我的android应用程序,它提供了自己的“测试项目”,并使用一个脚本重命名其包以反映测试中的应用程序,然后使用InstrumentationTestRunner子类: adb shell am instrument -w -e class sh.calaba.instrumentationbackend.InstrumentationBackend #{ENV['TEST_PACKAGE_NAME']}/sh.calaba.instrumentationba

我正在使用android应用程序测试我的android应用程序,它提供了自己的“测试项目”,并使用一个脚本重命名其包以反映测试中的应用程序,然后使用InstrumentationTestRunner子类:

adb shell am instrument -w -e class sh.calaba.instrumentationbackend.InstrumentationBackend #{ENV['TEST_PACKAGE_NAME']}/sh.calaba.instrumentationbackend.CalabashInstrumentationTestRunner
我将接受任何允许我为Android应用程序生成类似Emma或Cobertura的代码覆盖率报告的答案,其中包含在葫芦Android中测试时收集的数据

为了让艾玛工作,我。。。
  • 试图跟随Maven来构建我的项目(因为我已经很久没有使用ant了)。在
    target/emma
  • 修改葫芦android脚本,添加“
    -e coverage true
  • 当我运行葫芦android时,我最终看到“生成的覆盖率数据到/data/data/my.project/files/coverage.ec”
  • adb-e pull/data/data/my.project/files/coverage.ec coverage.ec
…所以现在我应该能够运行:

  • java-cp$ANDROID\u HOME/tools/lib/emma.jar emma report-r html-in target/emma/coverage.em,coverage.ec
但我有一个错误:

EMMA: processing input files...
java.io.UTFDataFormatException: malformed input around byte 107
…所以我假设有什么问题,我正试图找出如何生成
coverage.em
文件。我已经运行了“
android更新项目-p.
”和“
antemma
”以及“
antemma调试”
”,但我在任何地方都找不到coverage.em

…生成的build.xml文件似乎意味着coverage.em文件的生成仅在运行“ant emma test”时生成,但我认为这不会起作用,因为测试应用程序由葫芦android控制

为了让科贝图拉工作,我。。。
  • 谷歌搜索了各种形式的“cobertura android”,但似乎没有人运气好
  • 试图在我的Maven pom文件中配置cobertura配置文件来插入类,但是(在Maven 3中)我得到了
    • 一大堆关于log4j和ant具有“innerClass”属性的警告,我应该从源代码重新编译它们
    • 一个错误,com.jayway.maven.plugins.android.generation2:android maven plugin:3.3.0:dex“android-040-001:无法执行:Command=/bin/sh-c-cd/path/to/myproject&&java-jar$ANDOID_HOME/platform tools/lib/dx.jar--dex…”


。。。这可能就是为什么没有人能让cobertura在Android上工作?

问题是,
maven Android插件使用emma的2.1.5320版,而Android工具使用的是2.0.5312版。因此,这两个版本是不兼容的

修复方法是在这两个工具中只使用一个版本。通过克隆
maven android插件
repo,将emma依赖项版本设置回2.0.5312,并将其安装到我的本地存储库中,我已经能够让它正常工作。确保测试项目中的emma依赖项也是正确的,然后您应该能够生成覆盖率


另一种方法是确保所有工具都使用最新版本。我还没有测试过它,但是如果您从maven生成报告,它可能会工作,因为那时的版本将是相同的。您还可以下载emma的最新版本,并使用该软件包中的jar生成报告。

我只能通过Robotium让cobertura在JVM中运行单元测试。我敢肯定它会弄乱字节码,这会阻止它在Dalvik上使用。啊,谢谢!也许我可以在pom文件的插件定义中指定一个特定的Emma版本。。。或者使用maven生成报告,而不是使用我们为葫芦android添加的android工具版本,这样您就不必修改代码。我可以确认这是有效的:java-cp~/.m2/repository/emma/emma/2.1.5320/emma-2.1.5320.jar emma report-r html-in.//我的项目/target/emma/coverage.em,coverage.ec-sp.././my project/src感谢您的命令行!我也能用这个生成我的emma报告。非常感谢!!我花了将近一周的时间来追踪那个问题。发现这是因为版本号,我感到很沮丧。。。
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.