2012-08-29 17 views
27

Obecnie próbuję użyć fałszywej biblioteki, aby napisać podstawowe unittests nosa w python.Jak wykluczyć fałszywe paczka z raportu Pythona z wykorzystaniem testów nosetests

Po wykonaniu podstawowego przykładu spróbowałem teraz użyć nosetests --with-coverage, a teraz mam próbny pakiet, a paczka, którą próbowałem "wyśmiać", jest pokazana w raporcie pokrycia. Czy istnieje możliwość ich wyłączenia?

Oto klasa chcę przetestować:

from imaplib import IMAP4 

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

A testcase: z plastra mock importowej

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

teraz uzyskać następujące dane wyjściowe dla 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] 

Czy istnieje sposób na wykluczenie makiety pakietu i Pakiet imaplib bez konieczności ręcznej białych list wszystkich, ale tych pakietów przez --cover-package=PACKAGE

Dzięki Ned Batchelder teraz wiem o pliku .coveragerc, dzięki za to!

stworzyłem plik .coveragerc o następującej treści:

[report] 
omit = *mock* 

Teraz moje wyjście dla mock w raporcie zasięg jest:

mock      1240 1240  0% 16-2356 

Nie obejmuje pakiet próbny dłużej jednak nadal pokazuje to w raporcie.

Używam Coverage.py, wersja 3.5.2, jeśli to jest jakaś pomoc.

+0

Spróbuj usunąć poprzednie dane z '--cover-erase'. – xbello

Odpowiedz

30

Utwórz plik .coveragerc że wyklucza to, czego nie chcą w raporcie: http://nedbatchelder.com/code/coverage/config.html

+0

zbliżyłeś mnie o krok, dzięki za to. –

+0

Czy możesz rzucić okiem na informacje, które dodałem w moim pytaniu? Nie jestem pewien, czy jest to błąd po mojej stronie, czy też pominięcie w bloku [raport] nie działa poprawnie. –

+3

Mam podobny problem i utworzyłem plik "coveragerc", który zawiera wtrącenia i pominięcia. Jednak nie wydaje się, aby nos go rozważał i zaczyna działać na wszystkich bibliotekach Pythona (mimo że 'cover_pylib' jest ustawione na' False' w pliku konfiguracyjnym). Masz pomysł, jak zrobić coverager z nosem? – Boris

14

W swojej .coveragerc przenieść swój wpis omit z sekcji do sekcji [run][report].

+0

Dokładnie. '[raport]' blokuje raportowanie pliku, ale nie zmienia obliczeń%. "[run]" działa dla mnie. – cdunn2001

1

Miałem podobną sytuację testując szereg podpakietów w moim głównym katalogu pakietów. Uruchomiłem nosetests z katalogu głównego mojego modułu i Mock, a inne biblioteki zostały uwzględnione w raporcie pokrycia. Próbowałem używać --cover-module my_package w testach nosa, ale wtedy nie uwzględniono podpakietów.

uruchamiając następujące rozwiązać mój problem:

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

Więc jeśli cały kod, który chcesz przetestować jest w tym samym katalogu, następnie można uzyskać pokrycie dla niego samego, określając ścieżka modułu do nosetests. Dzięki temu unika się konieczności umieszczenia na białej liście każdego z submodułów.

(Python 2.7.6, 4.0.3 zasięg, nos 1.3.7)