programación para manejo lenguaje cursos básico arcmap python mocking code-coverage nose python-mock

para - python en arcmap



Cómo excluir un paquete simulado del informe de cobertura de Python con pruebas de nariz (3)

Cree un archivo .coveragerc que excluya lo que no desea en el informe: http://nedbatchelder.com/code/coverage/config.html

Actualmente trato de usar la biblioteca simulada para escribir algunos tests unitarios básicos en pitón.

Después de terminar un ejemplo básico, traté de usar nosetests --with-coverage y ahora tengo el paquete de simulacro y el paquete que traté de "burlarse" se muestra en el informe de cobertura. ¿Existe la posibilidad de excluir estos?

Esta es la clase que quiero probar:

from imaplib import IMAP4 class ImapProxy: def __init__(self, host): self._client = IMAP4(host)

Y el caso de prueba: desde el parche de importación simulado

from ImapProxy import ImapProxy class TestImap: def test_connect(self): with patch(''ImapProxy.IMAP4'') as imapMock: proxy = ImapProxy("testhost") imapMock.assert_called_once_with("testhost")

Ahora obtengo el siguiente resultado para las nosetests --with-coverage de nosetests --with-coverage

. Name Stmts Miss Cover Missing ------------------------------------------ ImapProxy 4 0 100% imaplib 675 675 0% 23-1519 mock 1240 810 35% [ a lot of lines]

¿Hay alguna forma de excluir el paquete simulado y el paquete imaplib sin tener que incluir manualmente en la lista blanca todos los paquetes por --cover-package=PACKAGE

Gracias a Ned Batchelder ahora sé sobre el archivo .coveragerc, ¡gracias por eso!

Creé un archivo .coveragerc con el siguiente contenido:

[report] omit = *mock*

Ahora mi salida para simulacro en el informe de cobertura es:

mock 1240 1240 0% 16-2356

Ya no cubre el paquete simulado, pero aún así lo muestra en el informe.

Yo uso Coverage.py, versión 3.5.2 si esto es de alguna ayuda.


En su .coveragerc mueva su entrada omitida de la sección [report] a la sección [run] .


Tuve una situación similar probando una serie de subpaquetes dentro de mi directorio principal de paquetes. Estaba ejecutando nosetests de nosetests desde el directorio superior de mi módulo y Mock y otras bibliotecas se incluyeron en el informe de cobertura. Traté de usar --cover-module my_package en nosetests, pero luego los subpaquetes no fueron incluidos.

Ejecutar lo siguiente resolvió mi problema:

nosetests --with-coverage --cover-erase --cover-package ../my_package

Por lo tanto, si todo el código que desea probar está en el mismo directorio, entonces puede obtener cobertura solo al especificar la ruta del módulo a los nosetests de nosetests . Esto evita la necesidad de incluir en la lista blanca cada uno de los submódulos de forma individual.

(Python 2.7.6, cobertura 4.0.3, nariz 1.3.7)