Подтвердить что ты не робот

Как исключить макет пакета из отчета о покрытии python с использованием носетов

В настоящее время я пытаюсь использовать библиотеку mock для написания базовых нот-unittests в python.

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

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

from imaplib import IMAP4

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

И тест:   от фиктивного импортного патча

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]

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

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

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

[report]
omit = *mock*

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

mock                     1240   1240     0%   16-2356

Он не распространяется на пакет mock больше, но все еще показывает его в отчете.

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

4b9b3361

Ответ 2

В вашем .coveragerc переместите запись omit из раздела [report] в раздел [run].

Ответ 3

У меня была аналогичная ситуация, проверяющая серию подпакетов в моем основном каталоге пакетов. Я запускал 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)