2015-04-04 15 views
8

I miei test eseguono chiaramente ogni funzione e non ci sono nemmeno importazioni inutilizzate. Eppure, secondo il rapporto di copertura, il 62% del codice è stato mai eseguito nel seguente file:Test del pallone: ​​perché la copertura esclude dichiarazioni di importazione e decoratori?

enter image description here

Qualcuno può sottolineare quello che potrebbe essere sbagliato?

Ecco come ho inizializzare il suite di test e la copertura:

cov = coverage(branch=True, omit=['website/*', 'run_test_suite.py']) 
    cov.start() 

    try: 
     unittest.main(argv=[sys.argv[0]]) 
    except: 
     pass 

    cov.stop() 
    cov.save() 

    print "\n\nCoverage Report:\n" 
    cov.report() 

    print "HTML version: " + os.path.join(BASEDIR, "tmp/coverage/index.html") 
    cov.html_report(directory='tmp/coverage') 
    cov.erase() 

risposta

7

Questa è la terza questione nel coverage.py FAQ:

D: Perché i corpi di funzioni (o classi) spettacolo come eseguito, ma le linee di def non lo fanno?

Questo accade perché la copertura viene avviata dopo che le funzioni sono state definite . Le linee di definizione vengono eseguite senza misurazione , quindi viene avviata la copertura, quindi viene richiamata la funzione. Ciò significa che il corpo è misurato, ma la definizione della funzione non lo è.

Per risolvere questo problema, avviare la copertura in precedenza. Se si utilizza la riga di comando per eseguire il programma con copertura, quindi l'intero programma sarà monitorato . Se si utilizza l'API, è necessario chiamare coverage.start() prima di importare i moduli che definiscono le proprie funzioni.

La cosa più semplice da fare si è eseguire i test sotto copertura:

$ coverage run -m unittest discover 

vostro script di test personalizzato non sta facendo molto al di là di ciò che la riga di comando di copertura avrebbe fatto, sarà più semplice usare la riga di comando.