Sonar riporta falso positivo per la copertura di filiale insufficiente nel blocco try-with-resources

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

Domanda

Utilizzando l'ultima versione (4.3.2) di Sonarqube, un blocco try-with-resources fornisce una copertura falsa positiva alla filiale della linea catch.Ad esempio:

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

Ma la mia unità test copre le eccezioni lanciate in ogni punto e tutte le altre linee hanno una copertura del 100% - la copertura effettiva è al 100%.E da dove viene il "8" da cui proviene?Non ci sono 8 posti che un'eccezione può essere lanciata.

Ho provato ad aggiungere // NOSONAR alla riga del problema e persino provato ad aggiungerlo ad ogni linea, ma il report è lo stesso.

altri tipi di problema erano ignorati quando si utilizza // NOSONAR, quindi non è un problema di configurazione sonar.

Sospetto che sia perché il sonar non consente i blocchi extra try-catch nel bytecode che un blocco di prova con risorse produce.

C'è un modo per decorare il codice che provoca con successo il sonar di ignorare questo particolare falso positivo?

È stato utile?

Soluzione

Sonarqube non supporta i costrutti Java Try-con-risorse.

Segnala inoltre un problema di controllo NULL-BOBUS sull'uso.

Poiché Sonarqube utilizza altri strumenti (PMD / FindBugs, ecc.) E usano analisi del codice di byte, loro (certamente) dicono che a volte questi sono falsi positivi. La risposta Il "Sonarqube Way" è quello di non utilizzare le risorse di prova fino a quando non hanno una corretta gestione del codice di byte risultante.

Tuttavia, nessun sviluppatore sano di mente consiglierei di avere la coda che agirà il cane. Il mio suggerimento è di contrassegnare come falso-posititve tramite Plug-in di Sonarqube, ma non sarà d'aiuto sulla copertura di prova perché la sua analisi del codice di byte in questo caso è semplicemente sbagliato.

Sonarqube ha sé migliaia di problemi (mangiano il loro cibo per cani).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top