![](/img/trans.png)
[英]Gradle Jacoco does not track the coverage of Spock test when using Powermock
[英]Unit tests coverage using Jacoco for test classes written using Powermock
我正在尝试在 jenkins 的 sonarqube 仪表板上获取代码覆盖率报告。 代码覆盖率报告即将发布,但仅显示 4.6% 的覆盖率。 在调查时,我发现使用 PowerMocks 编写的测试类被跳过了。
在进一步调查中,我发现“JaCoCo 不能很好地与动态修改/创建的类一起使用(这就是 powermock 的工作方式)。这是我们目前无法做任何事情的已知限制”。
是否有任何解决方法,以便我也可以为使用 PowerMocks 编写的测试类获得适当的代码覆盖率。
我已经设法用 Jacoco 生成 PowerMock 覆盖率,使用powermock-module-javaagent
。
只要确保在 jacoco 代理之后放置 powermock 代理:
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>true</useSystemClassLoader>
<argLine>${jacocoArgLine} -javaagent:${settings.localRepository}/org/powermock/powermock-module-javaagent/${powermock.version}/powermock-module-javaagent-${powermock.version}.jar -noverify</argLine>
...
如果你想看一个例子,看看这个项目: https : //github.com/jfcorugedo/sonar-scanner
在这里你可以看到声纳考虑了静态方法和 PowerMock 模拟的new
语句:
如果要模拟new
语句,请确保使用PowerMockRule
而不是PowerMockRunner
。
看看这个测试
对我有用的是删除它
@RunWith(PowerMockRunner.class)
并将其添加到类中
@Rule
public PowerMockRule rule = new PowerMockRule();
还需要为 powermockito junit4 规则添加依赖项。
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.