如何使用Maven在Android中获取代码覆盖率(android-maven-plugin)

Edu*_*ora 11 android code-coverage maven

我有一个包含各种子模块的Android Maven项目(我们称之为parent_project):my_library_project,app_using_my_library_project,test_projectextra_lib.

所以,结构将是这样的:

parent_project
   * my_library_project (Android Library Project)
   * app_using_my_library_project (Demo app that uses the Android Library Project)
   * test_project (Project containing the tests instrumented against app_using_my_library_project)
   * extra_lib
Run Code Online (Sandbox Code Playgroud)

我想要的是使用Maven为我的Android项目生成测试覆盖率(而不是Ant,我已经能够使用Ant生成代码覆盖率报告,遵循这些说明:https://wiki.jenkins-ci.org/display/ JENKINS/Building + an + Android + app +和+ test + project).

我对使用的代码覆盖工具没有强烈的偏好,但我更喜欢EMMA,因为它似乎是Android开发世界中最常见的.

我在其3.0.0-alpha-12版本中使用android-maven-plugin(http://code.google.com/p/maven-android-plugin/),我已经尝试将我的配置放入父母的pom.xml下一个:

<test>
  <coverage>true</coverage>
  <createreport>true</createreport>
</test>
Run Code Online (Sandbox Code Playgroud)

但这并不能产生所需的代码覆盖率报告.

所以:

  • 获取标准Java项目和Android项目的代码覆盖率的pom配置之间有什么区别吗?
  • 你知道任何使用Maven的Android项目有代码覆盖吗?
  • 关于如何做到这一点的任何提示?

hov*_*yan 2

如果您打算坚持使用 Maven,并且想要一个 Maven 插件来完成代码覆盖工作,我认为Cobertura是更好的选择,因为Emma稳定版的最后一个版本是 2005 年。

尽管在《Android 应用程序测试指南》(今年 6 月出版的最新一本书)中,他们讨论了 Emma 并演示了如何使用它进行测试,但我认为人们会坚持使用它,因为需要从源代码构建 Android(如果 Google 使用对于自己的OS开发来说,应该是最好的吧?)。

如果您不热衷于 Maven,我强烈建议尝试Robotium。Robotium 完全支持活动、对话框、Toast、菜单和上下文菜单。它还支持代码覆盖率(虽然目前是基于 Ant 的),有些人认为它是 Android 的领先测试平台之一。

编辑:

Cobertura 网站介绍,它支持 Maven 1 和 Maven 2 环境中的代码覆盖率。不过,您也可以找到 Maven 3 的示例。Maven 2 和 Maven 3 的 pom 配置之间存在问题。似乎要使报告正常工作,您必须基本上将旧的报告插件移至新的maven-site-plugin的配置部分。(详情请参阅文章)。

另一种选择是尝试将Sonar与 Maven 结合使用。Sonar 嵌入了 cobertura (也可以选择嵌入EMMA),有些人表示他们已经成功报告了代码覆盖率,尽管他们在使用“独立”cobertura 插件时遇到了问题。

  • 如果您希望基于在设备本身上运行的代码进行覆盖,则必须使用 Emma,因为 Dalvik VM 不能很好地与基于类加载器的实时检测工具配合得很好。Emma 用于检测 .class 文件,然后将其转换(dexed)为 Dalvik 文件。如果有一个覆盖工具可以在 dex 步骤之前对 .class 文件进行检测,那么它可能会起作用。 (3认同)