我遇到了在Eclipse中使用EclEmma插件的问题。
当我使用注释@RunWith
传递(PowerMockRunner.class)
作为参数时,它不会显示代码覆盖率。如果使用(MockitoJUnitRunner.class)
,一切都很好。
等待你的建议? :)
答案 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)
答案 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测试时的非零覆盖率。
享受!!!
答案 3 :(得分:0)
EclEmma修改字节码以检测代码覆盖率,因为PowerMock允许您运行无法访问的代码。两个更改都不兼容
解决方案是使用PowerMock提供的转轮,该转轮解决了不兼容问题
http://www.notonlyanecmplace.com/make-eclemma-test-coverage-work-with-powermock/