带有jacoco的声纳仅显示针对testng而非针对powermock的覆盖范围

时间:2015-08-06 18:32:27

标签: maven testng powermock jacoco

我们有一个多模块maven项目。

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

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

3 个答案:

答案 0 :(得分:0)

PowerMock known无法与JaCoCo合作。

答案 1 :(得分:0)

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

我写了一个基于Cobertura的替代maven插件,它允许您正确计算powermock测试覆盖的类的覆盖范围。您可以在这里看一下(任何反馈都会非常感激):

https://github.com/QualInsight/qualinsight-mojo-cobertura

我目前正在使用powermock(总共500k NCLOC,使用powermock的110多个测试类)来测试一组项目来检测错误/奇怪行为,但是任何其他反馈都会受到赞赏。

此maven插件生成的UT和IT覆盖率报告可以使用通用测试覆盖率插件直接导入SonarQube(请参阅项目文档)。当以下拉取请求被接受时,整个覆盖范围也可用。 SonarQube:

https://github.com/SonarSource/sonar-generic-coverage/pull/5

作为旁注,在项目的页面上解释了导致编写cobertura-maven-plugin替代品的原因。

希望它有所帮助!

干杯

答案 2 :(得分:0)

我已经成功使用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语句考虑在内:

enter image description here

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

看看this test