Boh*_*ian 3 false-positive try-with-resources sonarqube
使用SonarQube的最新版本(4.3.2),try-with-resources块会给catch线路的分支覆盖带来误报.例如:
public List<String> getLines(String filename) {
try (InputStream inputStream = getInputStream(filename)){
return IOUtils.readLines(inputStream);
} catch (IOException e) { // <<<<<<< REPORTS AS BRANCH COVERAGE 2/8
throw new IllegalArgumentException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
但我的单元测试涵盖了每个点抛出的异常,所有其他线路都有100%覆盖 - 实际覆盖率为100%.那里的"8"来自哪里?抛出异常不是8个地方.
我尝试添加// NOSONAR到问题行,甚至尝试将其添加到每一行,但报告是相同的.
其他类型的问题被使用的时候忽略了// NOSONAR,所以它不是一个声纳配置问题.
我怀疑这是因为声纳不允许try-with-resources块产生的字节码中的额外try-catch块.
有没有办法装饰成功导致声纳忽略这种特殊误报的代码?
SonarQube不支持Java try-with-resources构造.
它还报告了使用时的虚假空检问题.
由于SonarQube正在使用其他工具(PMD/FindBugs等),并且他们使用字节码分析,他们(诚然)说有时这些都是假阳性."SonarQube方式"的答案是不要使用try-with-resources,直到他们正确处理生成的字节码.
然而,没有理智的开发者会建议让尾巴摇尾巴.我的建议是通过SonarQube插件标记为假定位,但它对测试覆盖率没有帮助,因为在这种情况下对字节码的分析是错误的.
SonarQube本身有数千个问题(他们吃自己的狗粮).
| 归档时间: |
|
| 查看次数: |
3768 次 |
| 最近记录: |