Maven 带有jacoco的声纳仅显示testng的覆盖范围,不显示powermock的覆盖范围

Maven 带有jacoco的声纳仅显示testng的覆盖范围,不显示powermock的覆盖范围,maven,testng,powermock,jacoco,Maven,Testng,Powermock,Jacoco,我们有一个多模块maven项目 每个模块都有两个testng和powermock单元测试用例。我们使用jacoco生成代码覆盖率报告。但是,jacoco正在基于testng单元测试用例分析单元测试覆盖率,而忽略了powermock单元测试用例。因此,代码的总覆盖率越来越低 如何配置jacoco以同时获取testng和jacoco测试用例?PowerMock不能很好地与jacoco一起工作。正如bkail所述,jacoco和PowerMock仪器不能很好地混合 我基于Cobertura编写了另一个

我们有一个多模块maven项目

每个模块都有两个testng和powermock单元测试用例。我们使用jacoco生成代码覆盖率报告。但是,jacoco正在基于testng单元测试用例分析单元测试覆盖率,而忽略了powermock单元测试用例。因此,代码的总覆盖率越来越低


如何配置jacoco以同时获取testng和jacoco测试用例?

PowerMock不能很好地与jacoco一起工作。

正如bkail所述,jacoco和PowerMock仪器不能很好地混合

我基于Cobertura编写了另一个maven插件,它允许您正确计算powermock测试覆盖的类的覆盖率。您可以在此处查看(如有任何反馈,将不胜感激):

我目前正在一组使用powermock(总共500k个NCLOC,110多个使用powermock的测试类)的项目上尝试它,以检测bug/奇怪的行为,但是任何其他反馈都将不胜感激

此maven插件生成的UT和IT覆盖率报告可以使用通用测试覆盖率插件直接导入SonarQube(参见项目文档),当SonarQube接受以下拉动请求时,总体覆盖率也将可用:

作为旁注,导致编写cobertura maven插件替代品的原因将在项目页面上解释

希望有帮助


干杯

我已经使用
PowerMock模块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>
...

在这里,您可以看到sonar考虑了PowerMock模拟的静态方法和
new
语句:

如果要模拟
new
语句,请确保使用
PowerMockRule
而不是
PowerMockRunner

看看