我在Android上测试代码覆盖的替代方案是什么?

时间:2012-09-20 06:28:41

标签: android testing code-coverage cobertura emma

我知道Android的Ant工具附带内置的Emma代码覆盖,但Emma的报告看起来越来越过时,无法轻松集成到其他报告甚至Sonar中,主要是因为Emma缺乏详细的XML报告格式。我想要实现的是

  • 单元测试的代码覆盖率(基于Robolectric,已经使用Cobertura完成)
  • 集成测试的代码覆盖率(基于Robotium- / emulator,目前与Emma分开完成)
  • 理想情况下合并代码覆盖率结果(这是恕我直言,只有Cobertura可以使用,并且需要每次测试执行的原始* .ser文件)
  • 发布到Sonar(目前仅使用单元测试覆盖率,Sonar只了解一种覆盖格式)

我有其他选择吗?

编辑 This post on sonar-devel可能会总结Android代码覆盖率支持的当前状态以及Sonar支持。 叹息

3 个答案:

答案 0 :(得分:6)

我已经推送了一个github仓库,其中包含您在问题中提到的相同配置:

  • 标准的android测试+ emma代码覆盖率
  • robolectric + cobertura代码覆盖率(顺便说一句,我认为cobertura与robolectric不兼容)

并将其纳入声纳。一次只有一个,但配置仍然是一个有趣的工作基础。

https://github.com/stephanenicolas/Quality-Tools-for-Android

一位同事和我想到的是以一种非常相似的心态来处理这个问题。我们希望更好地集成不同的测试技术,以便Android项目和报告在声纳中工作。

如果您想加入我们的努力,我们很乐意为您提供回购权并开始与您合作。

斯特凡

- 更新

自2013年3月起,我们还提出了一个统一的配置,使用Jacoco离线仪器进行robolectric和标准junit测试,并在Sonar中同时显示结果。

答案 1 :(得分:2)

您可以使用robolectric框架。它允许您在Java VM上运行JUnit测试,而不是使用在Dalvik VM上运行的Android Junit测试。这将允许您使用任何标准覆盖工具(EclEmma,CodeCover,Cobertura等)。 它易于配置和运行稳定(你不能从Clover工具中说出来)。

答案 2 :(得分:1)

免责声明:我是Atlassian

是。还有另一种选择 - 您可以使用Atlassian Clover工具。从https://confluence.atlassian.com/display/CLOVER/Clover-for-Android

可以获得Clover-for-Android的alpha版本

您写道,您希望实现以下目标:

  • 单元测试的代码覆盖率 - 是的,Clover支持"运行为> Android JUnit Test"以及"运行为> JUnit测试" - 即没有启动模拟器(但后者需要稍微不同的设置,如Clover-for-Android手册中所述)
  • 集成测试的代码覆盖率 - 如上所述,"运行方式> Android JUnit Test"
  • 理想地合并代码覆盖率结果 - 是的,您可以合并多个测试运行的代码覆盖率结果;甚至可以在模拟器或设备中运行您的应用程序并执行手动测试(原文如此!)
  • 发布到Sonar - 有Clover Sonar Plugin可用,但我没有用Clover-for-Android测试它;可能你必须在Eclipse中运行测试,然后导出XML或HTML报告(Clover&Co; Coverage Explorer视图中的按钮)并将这些文件推送到Sonar build