Prueba de matraz: ¿por qué la cobertura excluye las declaraciones de importación y los decoradores?

Mis pruebas ejecutan claramente cada función, y tampoco hay importaciones no utilizadas. Sin embargo, según el informe de cobertura, el 62% del código nunca se ejecutó en el siguiente archivo:

introduzca la descripción de la imagen aquí

¿Alguien por favor puede señalar lo que podría estar haciendo mal?

Así es como inicializo el conjunto de pruebas y la cobertura:

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() 

Esta es la tercera pregunta en la cobertura. Preguntas frecuentes :

P: ¿Por qué los cuerpos de funciones (o clases) se muestran como ejecutados, pero las líneas de definición no lo hacen?

Esto sucede porque la cobertura se inicia después de que se definen las funciones. Las líneas de definición se ejecutan sin medición de cobertura, luego se inicia la cobertura y luego se llama a la función. Esto significa que el cuerpo se mide, pero la definición de la función en sí no lo es.

Para solucionar esto, comience la cobertura antes. Si usa la línea de comandos para ejecutar su progtwig con cobertura, entonces todo su progtwig será monitoreado. Si está utilizando la API, debe llamar a cover.start () antes de importar los módulos que definen sus funciones.

Lo más sencillo es ejecutar las pruebas bajo cobertura:

 $ coverage run -m unittest discover 

La secuencia de comandos de prueba personalizada no hace mucho más de lo que haría la línea de comandos de cobertura, será más simple usar la línea de comandos.