4

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

当我用@RunWith(PowerMockRunner.class) 注释一个类时,emma 尝试再次启动覆盖过程并抛出地址绑定异常。我认为 maven surefire 正在为不同的跑步者分叉一个新的 JVM,而 emma 试图在新的 JVM 上再次启动。

我为surefire 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)

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

4

2 回答 2

2

如果你不指定使用 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>...

问题应该消失

于 2012-06-27T09:11:35.463 回答
0

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

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

于 2014-04-15T21:25:02.293 回答