EclEmma代码覆盖插件和PowerMockRunner

时间:2014-11-20 15:12:28

标签: eclipse unit-testing powermock

我遇到了在Eclipse中使用EclEmma插件的问题。 当我使用注释@RunWith传递(PowerMockRunner.class)作为参数时,它不会显示代码覆盖率。如果使用(MockitoJUnitRunner.class),一切都很好。 等待你的建议? :)

4 个答案:

答案 0 :(得分:5)

这是Eclemma(JaCoCo)的一个已知问题。基本上两个库都修改字节代码,但Mockito在运行时修改它,生成不同的二进制.class文件。 JaCoCo显然使用通过hashMap跟踪它正在观看的类,其hashcode是由类定义派生的,所以在Mockito修改类之后哈希码会有所不同,因此JaCoco无法在其中找到类#39 ; s内部地图了。

更详细地讨论:

Why EclEmma doesn't coverage code with tests with @RunWith(PowerMockRunner.class)

Emma code coverage with JUnit and Powermock

http://code.google.com/p/powermock/issues/detail?id=402

答案 1 :(得分:2)

每次this link上次更新,更新EclEmma插件(通过卸载和重新安装)以及Eclipse(3.7)中的最新PowerMock和Mockito JAR解决了这个问题。

change log证实了这一点。

答案 2 :(得分:0)

Powermock与Eclemma 1.5.3配合良好;但不适用于最新的Eclemma 3.0.0 !!

Eclipse - 开普勒服务版本2 JUnit4 PowerMockito2 - 1.7.0。 Eclemma 1.5.3

以下给出的步骤正常,我可以看到运行junit测试时的非零覆盖率。

  1. http://www.eclemma.org/download.html
  2. 下载eclemma-1.5.3.zip
  3. 将内容解压缩到本地文件夹(eclemma-1.5.3)
  4. 将此路径添加到菜单栏:Window - >偏好 - >安装/更新 - >可用的软件站点
  5. 帮助 - >安装新软件 - > in"使用"下拉菜单,选择新条目(在prev。步骤中添加)
  6. 一个接一个地取消选中复选框,然后取消" Eclemma Coverage"将显示插件选项。 Eclemma Coverage选项将显示在选择窗口中。
  7. 继续下一步并完成......
  8. 享受!!!

答案 3 :(得分:0)

EclEmma修改字节码以检测代码覆盖率,因为PowerMock允许您运行无法访问的代码。两个更改都不兼容

解决方案是使用PowerMock提供的转轮,该转轮解决了不兼容问题

http://www.notonlyanecmplace.com/make-eclemma-test-coverage-work-with-powermock/