2016-05-18 16 views
5

Sto usando coverage.py per misurare la copertura del codice dei miei test. Ho attivato la copertura delle filiali, ma non riesco a dare un senso al rapporto.Come interpretare i risultati di copertura delle filiali in coverage.py di Python?

senza copertura ramo, ho ottenere il 100% di copertura:

Name       Stmts Miss Cover Missing 
------------------------------------------------------------ 
mylib/queries.py     44  0 100% 

Con l'ampia copertura ramo abilitato:

Name       Stmts Miss Branch BrPart Cover Missing 
-------------------------------------------------------------------------- 
mylib/queries.py     44  1  20  3 94% 55, 21->10, 53->-48, 59->-58 

La fonte in questione può essere trovato here.

21->10 ha senso; la clausola if non viene mai valutata a False (tornando all'inizio del ciclo for esterno).

Tuttavia, 53->-48 e 59->-58 mi graffio la testa. Cosa vogliono dire?

+0

Probabilmente è una lista vuota all'interno di quel ciclo per così non esegue mai il codice all'interno del ciclo. – Dan

+0

Hm, sì, i loop hanno sempre qualcosa da masticare nei casi di test che sto fornendo. Quindi il "ramo" mancante è il caso di un set vuoto? –

risposta

7

Il commento di Dan è vicino. Innanzitutto, i numeri negativi significano un'uscita da una funzione che inizia a quel numero di linea. Quindi -48 significa, esci dalla funzione che inizia alla riga 48.

Il problema non è un loop vuoto: quei rami si sarebbero verificati se i loop fossero mai stati completati. Sembra che forse non l'abbiano fatto.

BTW: Coverage.py 4.1b3 ha cambiato parte di questo comportamento: sarebbero stati contrassegnati come 53->exit, 59->exit. Inoltre, i rami stessi potrebbero essere identificati in modo diverso. Provaci.

+0

Ned, grazie per aver trovato il tempo di rispondere alla mia domanda, e grazie per questo pacchetto veramente utile. –

+0

L'output in 4.1b3 ha sicuramente più senso, tuttavia sono ancora confuso da '53-> exit'; la linea 53 qui è [un ciclo for all'interno di una funzione generatore] (https://gist.github.com/eykd/1d9cbb50f1cae0873bac05e3a20909ea#file-queries-py-L53) e non proprio un ramo. Cosa mi manca? –

+0

Il ciclo for non termina mai, quindi non esce mai naturalmente dalla funzione. Non sono sicuro di cosa faccia, però. Forse un'eccezione? –