Sonar meldet falsch positives Ergebnis für unzureichende Zweigstellenabdeckung im try-with-resources-Block

StackOverflow https://stackoverflow.com//questions/25009625

Frage

Bei Verwendung der neuesten Version (4.3.2) von SonarQube gibt ein try-with-resources-Block eine falsch positive Verzweigungsabdeckung des catch Linie.Beispielsweise:

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);
    }
}

Aber meine Komponententests decken Ausnahmen ab, die an jedem Punkt ausgelöst werden, und alle anderen Zeilen haben eine Abdeckung von 100% - die tatsächliche Abdeckung beträgt 100%.Und woher kommt die "8"?Es gibt nicht 8 Stellen, an denen eine Ausnahme ausgelöst werden kann.

Ich habe versucht hinzuzufügen // NOSONAR in die Problemzeile und habe sogar versucht, sie zu jeder Zeile hinzuzufügen, aber der Bericht ist derselbe.

Andere Arten von Problemen were wird bei Verwendung ignoriert // NOSONAR, es ist also kein Sonar-Konfigurationsproblem.

Ich vermute, das liegt daran, dass Sonar die zusätzlichen Try-Catch-Blöcke im Bytecode, die ein Try-with-Resources-Block erzeugt, nicht zulässt.

Gibt es eine Möglichkeit, den Code so zu dekorieren, dass Sonar dieses bestimmte falsch positive Ergebnis erfolgreich ignoriert?

War es hilfreich?

Lösung

SonarQube unterstützt keine Java-Try-with-Resources-Konstrukte.

Es wird auch ein gefälschtes Nullprüfungsproblem bei der Verwendung gemeldet.

Da SonarQube andere Tools (PMD / FindBugs usw.) verwendet und eine Bytecodeanalyse verwendet, sagen sie (zugegebenermaßen), dass dies manchmal falsch positive Ergebnisse sind.Die Antwort auf die "SonarQube-Methode" besteht darin, try-with-resources ERST zu verwenden, wenn der resultierende Bytecode ordnungsgemäß verarbeitet wurde.

Kein vernünftiger Entwickler würde jedoch empfehlen, den Schwanz mit dem Hund wedeln zu lassen.Mein Vorschlag ist, über SonarQube-Plug-Ins als falsch-positiv zu markieren, aber es hilft nicht bei der Testabdeckung, da die Analyse des Bytecodes in diesem Fall einfach falsch ist.

SonarQube selbst hat Tausende von Problemen (sie essen ihr eigenes Hundefutter).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top