我正在为我的测试类使用PowerMockito和@PrepareForTest注释。当我这样做时,声纳说没有任何分支被覆盖。但是,我的其他不使用PowerMockito的测试类运行良好。例如:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ MyClass.class })
public class MyClassTest {
//create some mocks and run some tests here
}
是否有人遇到同样的问题?
提前致谢。
答案 0 :(得分:7)
PowerMockito和声纳代码覆盖率计算存在一个已知问题,我对此进行了大量研究 - 截至今天,没有任何修复方法。 我个人如何处理它 - 尽量避免使用PowerMockito - 所以使用静态和最终稀疏,这通常是一个很好的建议,无论如何有更多的面向对象的代码。但是,仍然会有一些情况需要使用静态和/或最终。对于这些, 比较我的答案: cobertura-showing-proper-coverage-but-in-sonar-many-files-showing-0-coverage
答案 1 :(得分:1)
输入报告给您的声纳服务器所需的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>
为声纳运行maven目标 即,mvn install sonar:sonar