FAQ (Frequently Asked Questions)

D. Cosa provoca la copertura parziale di una riga (mostrata con un indicatore giallo)?

R. Una riga verrà indicata come parzialmente coperta se non sono eseguiti tutti i rami nel codice.

Di seguito vengono riportati alcuni esempi:

  1. Gestori di eccezioni:

  2. try {
    methodA() // methodA throws Exception
    } catch (Exception e) {..}

    La riga che richiama methodA è parzialmente coperta poiché vi sono due percorsi: viene generata e rilevata un'eccezione oppure non viene generata un'eccezione e il programma viene eseguito normalmente. Nel caso in cui non viene generata un'eccezione, viene indicata la copertura parziale poiché catch non viene mai eseguito.

  3. Codice costruttore condiviso:
  4. Nell'esempio riportato sopra, la riga 4 è contrassegnata come parzialmente coperta. Si noti che il codice di inizializzazione delle variabili di istanza viene eseguito indipendentemente dal costruttore utilizzato per creare l'istanza oggetto. Il compilatore inserisce il codice di inizializzazione in entrambi i costruttori. Il codice riportato sopra pertanto equivale approssimativamente a:

    Poiché si utilizza solo un costruttore, l'altro percorso di esecuzione non viene eseguito e viene indicata la copertura parziale.

D. Nei report di copertura del codice, per quale motivo le righe totali riportate per un package non sono sempre uguali ai totali visualizzati per le classi in quel package?

R. Quando si riportano le righe totali in un package, non vengono calcolate tutte le righe condivise tra i metodi così non vengono contate due volte.

D. Per quale motivo le definizioni di classe (ad esempio, public class Foo {..}) vengono indicate come non coperte (rosso) o parzialmente coperte (giallo)?

R. Se la classe non ha un costruttore predefinito specificato, il compilatore ne genererà uno e, poiché è implicito, è possibile che venga associato a quella riga di codice. Inoltre, se esiste un codice di inizializzazione statico (ad esempio, campi statici), il compilatore genera blocchi di inizializzazione statica che possono essere associati anche a quella riga.

D. Per quale motivo gli indicatori di copertura in Esplora package vengono visualizzati in rosso anche se la percentuale coperta supera il livello di copertura accettabile?

R. Quando più di un criterio di accettazione viene impostato (ad esempio, blocco AND del metodo), l'indicatore verrà visualizzato in rosso se uno qualsiasi dei criteri viene soddisfatto. I criteri di accettazione vengono impostati selezionando le proprietà di copertura del codice e quindi abilitando gli indicatori e le percentuali. Gli indicatori di copertura visualizzati vengono impostati selezionando le preferenze di copertura del codice e quindi abilitando gli indicatori (metodo, blocco, etc...).. Il colore verrà determinato dai criteri impostati utilizzando la pagina delle proprietà e non dalla pagina delle preferenze.

D. Quali righe non vengono contate in Copertura codice?

R. Le seguenti righe non vengono contate come coperte, non coperte o parzialmente coperte e non vengono utilizzate per calcolare la percentuale coperta:

D. Che cosa significano i blocchi in una copertura blocco?

R. Un'unità eseguibile inizia all'inizio di ogni blocco di base e ad ogni byte-code il cui numero di riga di origine è differente dal byte-code precedente. Un blocco di base è un'area di istruzioni di byte-code che non possono essere diramate o espanse. Quando viene eseguita la prima istruzione in un blocco di base, vengono eseguite tutte le istruzioni, per cui le istruzioni vengono considerate un singolo gruppo.

I blocchi di base terminano con istruzioni quali branch, call, throw e return.

D. Per quale motivo durante l'esecuzione del debug delle applicazioni abilitate di copertura del codice, il programma di debug passa a llc_probe.class e non al metodo previsto?

R. Ciò è dovuto alla modalità con cui i dati di copertura del codice sono stati raccolti. Per aggirare il problema, è necessario utilizzare i filtri di avanzamento: