【问题标题】:Emma coverage with Powermock使用 Powermock 覆盖 Emma
【发布时间】:2012-03-23 10:14:28
【问题描述】:

我们在项目中配置了 emma,它会生成覆盖率报告。整个设置工作正常,直到我引入 PowerMock 来模拟一些静态方法。

当我使用 @RunWith(PowerMockRunner.class) 注释一个类时,emma 会尝试再次启动覆盖过程并引发 addressbind 异常。我认为 maven surefire 正在为不同的跑步者分叉一个新的 JVM,并且 emma 尝试在新的 JVM 上再次启动。

我尝试使用不同的选项来确保 forkMode,但没有帮助。 Running util.HttpClientFactoryTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.154 sec Running xxx.util.ServiceConnectorUtilTest EMMA: collecting runtime coverage data ... java.net.BindException: Address already in use: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)

关于如何解决这个问题的想法?任何帮助都非常感激。谢谢

【问题讨论】:

标签: fork code-coverage maven-surefire-plugin emma


【解决方案1】:

如果不指定使用maven的emma插件的版本会默认为

<groupId>org.sonatype.maven.plugin</groupId>
<artifactId>emma-maven-plugin</artifactId>
<version>1.0</version>

如果您在构建标签中指定最新版本 1.2(或 1.1)

<build>
  <pluginManagement>
      <plugins>
          <plugin>
              <groupId>org.sonatype.maven.plugin</groupId>
              <artifactId>emma-maven-plugin</artifactId>
              <version>1.0</version>
          </plugin>
      </plugins>
  </pluginManagement>...

问题应该消失

【讨论】:

  • 这个真的很有帮助
【解决方案2】:

Bumping emma 插件版本可能适用于纯 java 项目,但最新的 android 版本的 com.amazon.emma-droid 仍然没有此修复。

仅当您使用至少两个不同的 JunitClassRunners(例如,默认一个和 @RunWith(PowerMockRunner.class))时,才会出现问题。开始使用 RobolectricTestRunner 时,我遇到了同样的问题。解决方法是对模块中的每个测试用例使用相同的 JunitClassRunner。例如。使用 @RunWith(PowerMockRunner.class) 甚至对于没有任何 PowerMock 的简单 JUnit。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多