我想在jenkins上的sonarqube仪表板上获取代码覆盖率报告。代码覆盖率报告即将出炉,但仅覆盖率为4.6%。在调查时我发现使用PowerMocks编写的测试类被忽略了。
在进一步调查中,我发现“JaCoCo与动态修改/创建的类不兼容(这是powermock的工作方式)。这是一个已知的限制,我们目前无法做任何关于”。
是否有任何解决方法可以为使用PowerMocks编写的测试类获得正确的代码覆盖率。
答案 0 :(得分:1)
简单回答:不,没有。
答案很长 - 归结为这些选项:
答案 1 :(得分:1)
我已经成功使用powermock-module-javaagent
通过Jacoco生成了PowerMock报道。
只需确保将Powermock代理放在 jacoco代理之后:
<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
。
答案 2 :(得分:0)
对我有用的是删除它
purrr::map2(list_1[common_names], list_2[common_names], `+`)
并将其添加到类中
@RunWith(PowerMockRunner.class)
还需要为powermockito junit4规则添加依赖。
@Rule
public PowerMockRule rule = new PowerMockRule();
这个 official page 将有助于更多人理解它。 PowerMock