2012-08-29 24 views
27

Actualmente trato de usar la biblioteca de simulacros para escribir algunos tests de unidad de nose básicos en python.Cómo excluir el paquete de simulacro del informe de cobertura de Python usando nosetests

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

Aquí es la clase quiero probar:

from imaplib import IMAP4 

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

Y el caso de prueba: del parche simulacro de importación

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 consigo 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 listas blancas manualmente todos menos aquellos paquetes por --cover-package=PACKAGE

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

he creado un archivo de .coveragerc con el siguiente contenido:

[report] 
omit = *mock* 

Ahora mi salida para maqueta en el informe de la cobertura es:

mock      1240 1240  0% 16-2356 

No cubre el paquete simulacro por más tiempo, pero todavía lo muestra en el informe.

Uso Coverage.py, versión 3.5.2 si esto sirve de ayuda.

+0

tratar de borrar los datos anteriores con '--cover-erase'. – xbello

Respuesta

30

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

+0

me tienes un paso más cerca, gracias por eso. –

+0

¿Podría echar un vistazo a la información que agregué en mi pregunta? No estoy seguro de si es un error de mi parte o si omitir en el bloque [informe] no funciona correctamente. –

+3

Me enfrento a un problema similar y creé un archivo 'coveragerc' que contiene inclusiones y omisiones. Sin embargo, nose parece considerarlo y procede a ejecutar la cobertura en todas las bibliotecas de Python (a pesar de que 'cover_pylib' se establece en' False' en el archivo de configuración). ¿Alguna idea de cómo hacer que coveragerc funcione con la nariz? – Boris

14

En su .coveragerc mover su entrada omit de la sección [report] a la sección [run].

+0

Exactamente. '[informe]' suprime los informes por archivo, pero no altera el% de cálculos. '[ejecutar]' funciona para mí. – cdunn2001

1

Tuve una situación similar probando una serie de subpaquetes dentro de mi directorio principal de paquetes. 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 los subpaquetes no fueron incluidos.

ejecutando los siguientes resuelto mi problema:

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

Así, si todo el código que desea probar se encuentra en el mismo directorio, continuación puede obtener cobertura para ella sola especificando el ruta de módulo a nosetests. Esto evita la necesidad de incluir en la lista blanca cada uno de los submódulos de forma individual.

(Python 2.7.6, 4.0.3 cobertura, la nariz 1.3.7)

Cuestiones relacionadas