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.

Author: Frederick Roth, 2012-08-30

3 answers

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

 32
Author: Ned Batchelder,
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].

 14
Author: Thomas E Jenkins,
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)

 2
Author: Dr John A Stevenson,
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