【发布时间】:2014-11-20 15:12:27
【问题描述】:
我遇到了在 Eclipse 中使用 EclEmma 插件的问题。
当我使用注释 @RunWith 传递 (PowerMockRunner.class) 作为参数时,它不会显示代码覆盖率。如果使用(MockitoJUnitRunner.class),一切都很好。
等待您的建议? :)
【问题讨论】:
标签: eclipse unit-testing powermock
我遇到了在 Eclipse 中使用 EclEmma 插件的问题。
当我使用注释 @RunWith 传递 (PowerMockRunner.class) 作为参数时,它不会显示代码覆盖率。如果使用(MockitoJUnitRunner.class),一切都很好。
等待您的建议? :)
【问题讨论】:
标签: eclipse unit-testing powermock
这是 Eclemma (JaCoCo) 的一个已知问题。基本上这两个库都会修改字节码,但 Mockito 在运行时会修改它,这会产生不同的二进制 .class 文件。 JaCoCo 显然使用通过 hashMap 跟踪它正在监视的类,其哈希码是由类定义派生的,因此在 Mockito 修改类后哈希码会有所不同,因此 JaCoco 无法再在其内部 Maps 中找到该类。
详细讨论:
Why EclEmma doesn't coverage code with tests with @RunWith(PowerMockRunner.class)
【讨论】:
根据 this link 上次更新,更新 EclEmma 插件(通过卸载和重新安装)以及 Eclipse (3.7) 中的最新 PowerMock 和 Mockito JAR 解决了该问题。
change log 证实了这一点。
【讨论】:
Powermock 与 Eclemma 1.5.3 配合良好;但不适用于最新的 Eclemma 3.0.0 !!
Eclipse - Kepler 服务版本 2 JUnit4 PowerMockito2 - 1.7.0。 埃克莱玛 1.5.3
以下给出的步骤正在运行,我能够在运行 junit 测试时看到非零覆盖率。
享受!!!
【讨论】:
EclEmma 修改字节码以检测代码覆盖率,就像 PowerMock 一样,允许您运行无法访问的代码。两种更改都不兼容
解决方案是使用 PowerMock 提供的运行器来解决该不兼容问题
http://www.notonlyanecmplace.com/make-eclemma-test-coverage-work-with-powermock/
【讨论】: