Powermock and sonar jacoco的覆盖率不兼容问题解决 3

11 篇文章 0 订阅
6 篇文章 0 订阅

上一篇介绍了如何让surefire,failsafe和jacoco maven plugin如何结合配置,这一篇具体说说如何使用powermock的agent来解决覆盖率不兼容问题。
首先在pom中加入powermock agent maven依赖

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-module-junit4-rule-agent</artifactId>
  <version>${powermock.version}</version>
  <scope>test</scope>
</dependency>

Note: It’s recommended that you put powermock-module-junit4-rule-agent before junit in the classpath. (记得把这个dependency放到junit之前)。

接下来修改之前的测试代码:
修改之前的实现

@RunWith(PowrMockRunner.class)
@PrepareForTest(X.class);
public class MyTest {
     private X x;
     @Before
     public void setUp {
        x=PowerMockito.mock(X.class);
     }
     // Tests goes here
     ...
}

修改之后的实现
去掉runwith,加入@Rule annotation,很简单!

@PrepareForTest(X.class);
public class MyTest {
     @Rule
     PowerMockRule rule = new PowerMockRule();

     private X x;
     @Before
     public void setUp {
        x=PowerMockito.mock(X.class);
     }
     // Tests goes here
     ...
}

最后据说在mock final的时候要在surefire的启动参数中加入agent启动参数,这种mock我们没有使用,不过还是加上了。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.15</version>
                <configuration>
                    <argLine>
                        -javaagent:${settings.localRepository}/org/powermock/powermock-module-javaagent/${powermock.version}/powermock-module-javaagent-${powermock.version}.jar -XX:-UseSplitVerifier ${surefireArgLine}
                    </argLine>                    <useSystemClassloader>true</useSystemClassloader>
                </configuration>
            </plugin>

在我们项目中最后3种使用方式覆盖率的差别,可以看出Cobertura还是有最高的覆盖率,使用了powermock agent之后覆盖率也算不错。

Powermock&JacocoPowermock Agent&JacocoPowermock&Cobertura
10%50%60%

参考资料:https://github.com/jayway/powermock/wiki/PowerMockAgent

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值