【问题标题】:EclEmma code coverage plugin and PowerMockRunnerEclEmma 代码覆盖插件和 PowerMockRunner
【发布时间】:2014-11-20 15:12:27
【问题描述】:

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

【问题讨论】:

    标签: eclipse unit-testing powermock


    【解决方案1】:

    这是 Eclemma (JaCoCo) 的一个已知问题。基本上这两个库都会修改字节码,但 Mockito 在运行时会修改它,这会产生不同的二进制 .class 文件。 JaCoCo 显然使用通过 hashMap 跟踪它正在监视的类,其哈希码是由类定义派生的,因此在 Mockito 修改类后哈希码会有所不同,因此 JaCoco 无法再在其内部 Maps 中找到该类。

    详细讨论:

    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

    【讨论】:

    【解决方案2】:

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

    change log 证实了这一点。

    【讨论】:

      【解决方案3】:

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

      Eclipse - Kepler 服务版本 2 JUnit4 PowerMockito2 - 1.7.0。 埃克莱玛 1.5.3

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

      1. 从http://www.eclemma.org/download.html下载eclemma-1.5.3.zip
      2. 将内容解压到本地文件夹 (eclemma-1.5.3)
      3. 将此路径添加到菜单栏:窗口 -> 首选项 -> 安装/更新 -> 可用软件站点
      4. 帮助 -> 安装新软件 -> 在“使用”下拉菜单中,选择新条目(在上一步中添加)
      5. 依次取消选中复选框,然后将显示“Eclemma Coverage”插件选项。 Eclemma Coverage 选项将显示在选择窗口中。
      6. 继续下一步并完成...

      享受!!!

      【讨论】:

        【解决方案4】:

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

        解决方案是使用 PowerMock 提供的运行器来解决该不兼容问题

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-25
          • 1970-01-01
          • 2011-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多