Ответ 1
Создайте файл .coveragerc, который исключает то, чего вы не хотите в отчете: http://nedbatchelder.com/code/coverage/config.html
В настоящее время я пытаюсь использовать библиотеку 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, если это какая-то помощь.
Создайте файл .coveragerc, который исключает то, чего вы не хотите в отчете: http://nedbatchelder.com/code/coverage/config.html
В вашем .coveragerc переместите запись omit
из раздела [report]
в раздел [run]
.
У меня была аналогичная ситуация, проверяющая серию подпакетов в моем основном каталоге пакетов. Я запускал 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)