2012-08-29 7 views
27

Ich versuche derzeit, die Mock-Bibliothek zu verwenden, um einige grundlegende Nose-Unittests in Python zu schreiben.So schließen Sie das Mock-Paket aus dem Python-Coverage-Bericht mit Hilfe von Nasetests aus

Nachdem ich ein grundlegendes Beispiel beendet habe, habe ich jetzt versucht, nosetests --with-coverage zu verwenden, und jetzt habe ich das Schein-Paket und das Paket, das ich versuchte, "wegzuspielen", wird im Reichweitenbericht gezeigt. Gibt es eine Möglichkeit, diese auszuschließen? Hier

ist die Klasse I testen wollen:

from imaplib import IMAP4 

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

Und der Testfall: von Mock Import Patch

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

ich nun die folgende Ausgabe für 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] 

Gibt es eine Möglichkeit, das Mock-Paket und die imaplib Paket ohne mit manuell alle weiße Liste, aber diese Pakete von --cover-package=PACKAGE

Dank Ned Batchelder Ich weiß jetzt, über die .coveragerc Datei, Dank!

habe ich eine .coveragerc-Datei mit folgendem Inhalt:

[report] 
omit = *mock* 

Jetzt für mock meine Ausgabe in der Berichterstattung Bericht ist:

mock      1240 1240  0% 16-2356 

Es ist das Mock-Paket nicht decken mehr aber zeigt es immer noch im Bericht.

Ich verwende Coverage.py, Version 3.5.2, wenn dies eine Hilfe ist.

+0

Versuchen zum vorherigen Daten mit '--cover-erase' zu ​​löschen. – xbello

Antwort

30

eine .coveragerc Datei erstellen, die ausschließt, was Sie nicht wollen, in dem Bericht: http://nedbatchelder.com/code/coverage/config.html

+0

du hast mich einen Schritt näher gebracht, danke dafür. –

+0

Könnten Sie sich die Informationen ansehen, die ich in meine Frage eingefügt habe? Ich bin mir nicht sicher, ob es ein Fehler auf meiner Seite ist oder ob das Auslassen im Block [report] nicht korrekt funktioniert. –

+3

Ich stehe vor einem ähnlichen Problem, und erstellt eine 'coveragerc' Datei, die Einschlüsse und Auslassungen enthält. Nose scheint dies jedoch nicht zu berücksichtigen und deckt alle Python-Bibliotheken ab (obwohl 'cover_pylib' in der Konfigurationsdatei auf' False' gesetzt ist). Irgendeine Idee, wie man coveragerc mit Nase arbeitet? – Boris

14

In Ihrem .coveragerc vom [report] Abschnitt zum [run] Abschnitt Ihre omit Eintrag.

+0

Genau. '[report]' unterdrückt die Berichterstellung pro Datei, ändert aber nicht die% -Berechnungen. '[run]' funktioniert für mich. – cdunn2001

1

Ich hatte eine ähnliche Situation, eine Reihe von Unterpaketen in meinem Hauptpaketverzeichnis zu testen. Ich lief nosetests aus dem obersten Verzeichnis meines Moduls und Mock und andere Bibliotheken wurden in den Erfassungsbericht aufgenommen. Ich habe versucht, --cover-module my_package in nosetests, aber dann die Unterpakete wurden nicht enthalten.

die folgende Lauf mein Problem gelöst:

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

So wenn den gesamten Code, den Sie testen wollen, ist im gleichen Verzeichnis, dann können Sie Abdeckung für sie bekommen allein durch die Angabe Modulpfad zu nosetests. Dies vermeidet die Notwendigkeit, jedes der Submodule einzeln auf die weiße Liste zu setzen.

(Python 2.7.6, 4.0.3 Abdeckung, Nase 1.3.7)

Verwandte Themen