使用 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);
}
}
但是我的单元测试涵盖了在每个点抛出的异常,并且所有其他行都有 100% 的覆盖率——实际的覆盖率是 100%。“8”从何而来?没有 8 个地方可以抛出异常。
我尝试添加// NOSONAR
到问题行,甚至尝试将其添加到每一行,但报告是一样的。
使用时忽略了其他类型的问题// NOSONAR
,因此不是声纳配置问题。
我怀疑这是因为声纳不允许在 try-with-resources 块产生的字节码中使用额外的 try-catch 块。
有没有办法装饰成功导致声纳忽略这个特定误报的代码?