Как исключить макет пакета из отчета покрытия python с помощью nosetests

в настоящее время я пытаюсь использовать макет библиотеки, чтобы написать некоторые основные unittests носа в python.

после завершения некоторого основного примера я теперь попытался использовать nosetests --with-coverage и теперь у меня есть макет пакета, и пакет, который я пытался "издеваться", показан в отчете о покрытии. Есть ли возможность исключить их?

вот класс, который я хочу проверить:

from imaplib import IMAP4

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

и testcase: из макета импорта патча

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

теперь я получаю следующее вывод для 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]

есть ли способ исключить макет пакета и пакет imaplib без вручную белый список всех, кроме этих пакетов по --cover-package=PACKAGE

благодаря Неду Батчелдеру я теперь знаю об этом .coveragerc файл, спасибо за это!

Я создал .файл coveragerc со следующим содержимым:

[report]
omit = *mock*

теперь мой вывод для макета в отчете о покрытии:

mock                     1240   1240     0%   16-2356

это не покройте макет пакета больше, но по-прежнему показывает его в отчете.

я использую Coverage.py, версия 3.5.2, если это какая-либо помощь.

3 ответов


создать .coveragerc файл, который исключает то, что вы не хотите в отчете:http://nedbatchelder.com/code/coverage/config.html


В вашей .coveragerc переместить omit запись до .


у меня была аналогичная ситуация, тестирующая серию субпакетов в моем основном каталоге пакетов. Я бежал nosetests из верхнего каталога моего модуля и Mock и другие библиотеки были включены в отчет о покрытии. Я пробовал использовать --cover-module my_package в nosetests, но тогда субпакеты не были включены.

запуск следующего решил мою проблему:

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

и если весь код, который вы хотите проверить в том же каталоге, затем вы можете получить покрытие только для него, указав путь модуля к nosetests. Это позволяет избежать необходимости белого списка каждого из подмодулей по отдельности.

(в Python 2.7.6, покрытие 4.0.3, нос 1.3.7)