PowerMockito禁用Sonar分支覆盖

时间:2015-01-13 15:17:37

标签: mockito code-coverage sonarqube powermock

我正在为我的测试类使用PowerMockito和@PrepareForTest注释。当我这样做时,声纳说没有任何分支被覆盖。但是,我的其他不使用PowerMockito的测试类运行良好。例如:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ MyClass.class })
public class MyClassTest {
    //create some mocks and run some tests here
}

是否有人遇到同样的问题?

提前致谢。

2 个答案:

答案 0 :(得分:7)

PowerMockito和声纳代码覆盖率计算存在一个已知问题,我对此进行了大量研究 - 截至今天,没有任何修复方法。 我个人如何处理它 - 尽量避免使用PowerMockito - 所以使用静态和最终稀疏,这通常是一个很好的建议,无论如何有更多的面向对象的代码。但是,仍然会有一些情况需要使用静态和/或最终。对于这些, 比较我的答案: cobertura-showing-proper-coverage-but-in-sonar-many-files-showing-0-coverage

答案 1 :(得分:1)

  1. Add cobertura plugin到您的声纳服务器
  2. 在构建中使用maven cobertura plugin(我假设构建使用maven)
  3. 输入报告给您的声纳服务器所需的cobertura和声纳相关属性。示例如图所示。

    <sonar.java.coveragePlugin>cobertura</sonar.java.coveragePlugin>
    <sonar.host.url>http://localhost:9500</sonar.host.url>    
    <sonar.sources>${project.build.sourceDirectory}</sonar.sources>
    <sonar.junit.reportsPath>${project.build.directory}/surefire-reports</sonar.junit.reportsPath>
    <sonar.cobertura.reportPath>${project.build.directory}/site/cobertura/coverage.xml</sonar.cobertura.reportPath>
    
  4. 为声纳运行maven目标 即,mvn install sonar:sonar