Cómo excluir paquetes simulados del informe de cobertura de python usando nosetests
Actualmente trato de usar la biblioteca simulada para escribir algunas unidades básicas de nose en python.
Después de terminar un ejemplo básico, ahora traté de usar nosetests --with-coverage
y ahora tengo el paquete simulado y el paquete que traté de 'burlarme' se muestra en el informe de cobertura. ¿Existe la posibilidad de excluirlos?
Aquí está 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 mock
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 la siguiente salida para 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 manera de excluir el paquete simulado y el paquete imaplib sin tener que incluir manualmente todos los paquetes excepto aquellos por --cover-package=PACKAGE
Gracias a Ned Batchelder ahora sé acerca de la .archivo coveragerc, gracias por eso!
He creado un .archivo coveragerc con el siguiente contenido:
[report]
omit = *mock*
Ahora mi salida para mock en el informe de cobertura es:
mock 1240 1240 0% 16-2356
Ya no cubre el paquete simulado, pero todavía lo muestra en el informe.
Uso Coverage.py, versión 3.5.2 si esto es de ayuda.
3 answers
Crear un.archivo coveragerc que excluye lo que no desea en el informe: http://nedbatchelder.com/code/coverage/config.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-30 14:18:37
En su .coveragerc mueve tu entrada omit
de la sección [report]
a la sección [run]
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-07 19:00:09
Tuve una situación similar probando una serie de subpaquetes dentro de mi directorio de paquetes principal. Estaba ejecutando nosetests
desde el directorio superior de mi módulo y Mock
y otras bibliotecas se incluyeron en el informe de cobertura. Intenté usar --cover-module my_package
en nosetests, pero luego no se incluyeron los subpaquetes.
Ejecutar lo siguiente resolvió mi problema:
nosetests --with-coverage --cover-erase --cover-package ../my_package
Entonces, si todo el código que desea probar está en el mismo directorio, entonces puede obtener cobertura solo para ello especificando la ruta del módulo a nosetests
. Esto evita la necesidad de incluir en la lista blanca cada uno de los submódulos individualmente.
(Python 2.7.6, coverage 4.0.3, nose 1.3.7)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-07 21:56:08