2012-03-05 72 views
4

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

当我用@RunWith(PowerMockRunner.class)注释一个类时,emma试图再次启动覆盖过程并引发addressbind异常。我认为maven surefire会为不同的亚军分配一个新的JVM,而艾玛尝试在新的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)

想法如何解决这个问题?任何帮助大大appartiated。由于

+0

使用[jacoco](http://www.eclemma.org/jacoco/)。请参阅[在测试阶段运行jacoco](http://stackoverflow.com/questions/9531608/which-emma-maven-plugin-should-i-be-using/9533745#9533745) – 2012-03-06 07:37:21

+0

我有同样的问题,有没有人找到了解决办法? – 2012-06-26 14:12:31

+0

https://groups.google.com/forum/?fromgroups#!topic/powermock/FKRGTkYGb9s接缝是相同的问题 – 2012-06-26 14:32:18

回答

2

如果不指定艾玛插件中使用Maven的版本将默认为

<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>... 

问题应该消失

+0

这真的有帮助 – stewenson 2013-11-25 13:38:55

0

碰碰艾玛插件版本可能适用于普通的Java项目,但com.amazon.emma-机器人的最新Android版本还没有此修复程序。

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