catch
SonarQube の最新バージョン (4.3.2) を使用すると、try-with-resources ブロックにより、ラインのブランチ カバレッジに誤検知が与えられます。例えば:
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 ブロックを許可していないためだと思います。
ソナーがこの特定の誤検出を正常に無視するようにコードを装飾する方法はありますか?