Sonar riporta falso positivo per la copertura di filiale insufficiente nel blocco try-with-resources
-
20-12-2019 - |
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?
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).