我们在生成覆盖率报告的项目中配置了 emma。整个设置运行良好,直到我引入 PowerMock 来模拟一些静态方法。
当我用@RunWith(PowerMockRunner.class) 注释一个类时,艾玛尝试再次启动覆盖过程并抛出地址绑定(bind)异常。我认为 maven surefire 正在为不同的运行程序 fork 一个新的 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)
关于如何解决这个问题的想法?任何帮助都非常感谢。谢谢
最佳答案
如果你没有指定 emma 插件的版本来使用 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>...
这个问题应该消失
关于fork - 使用 Powermock 覆盖 Emma,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9575149/