如何使用测试从python覆盖率报告中排除模拟包
我目前尝试使用mock库用python编写一些基本的nose单元测试 在完成一些基本示例之后,我现在尝试使用如何使用测试从python覆盖率报告中排除模拟包,python,mocking,code-coverage,nose,python-mock,Python,Mocking,Code Coverage,Nose,Python Mock,我目前尝试使用mock库用python编写一些基本的nose单元测试 在完成一些基本示例之后,我现在尝试使用nosetests——覆盖率,现在我有了模拟包,我尝试“模拟”的包显示在覆盖率报告中。是否有可能排除这些 下面是我要测试的类: from imaplib import IMAP4 class ImapProxy: def __init__(self, host): self._client = IMAP4(host) 测试用例: 从模拟导入补丁 from Ima
nosetests——覆盖率,现在我有了模拟包,我尝试“模拟”的包显示在覆盖率报告中。是否有可能排除这些
下面是我要测试的类:
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的以下输出——覆盖率
.
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
手动白名单列出除这些包以外的所有包
感谢Ned Batchelder,我现在知道了.coveragerc文件,谢谢
我创建了一个.coveragerc文件,其中包含以下内容:
[report]
omit = *mock*
现在,我在覆盖率报告中对mock的输出是:
mock 1240 1240 0% 16-2356
它不再涵盖模拟包,但仍在报告中显示它
如果有帮助的话,我会使用Coverage.py,3.5.2版。创建一个.Coverage.c文件,排除您在报告中不需要的内容:在.Coverage.c中,将您的从[report]
部分删除条目移动到[run]
部分。我在测试主包目录中的一系列子包时遇到了类似的情况。我在模块的顶层目录中运行nosetests
,覆盖率报告中包括了Mock
和其他库。我试着在nosetest中使用——cover module my_package
,但是子包没有包括在内
运行以下命令解决了我的问题:
nosetests --with-coverage --cover-erase --cover-package ../my_package
因此,如果您要测试的所有代码都在同一目录中,那么您可以通过将模块路径指定为nosetests
来单独获得覆盖率。这避免了需要单独将每个子模块列为白名单
(Python 2.7.6,coverage 4.0.3,nose 1.3.7)您能看看我在问题中添加的信息吗?我不确定这是否是我的错误,或者[report]块中的omit是否工作不正常。我面临着类似的问题,并创建了一个包含包含和遗漏的coveragerc
文件。但是,NoSE似乎不考虑它,并继续运行对所有Python库的覆盖(尽管<代码> CurropypyLb在配置文件中被设置为<代码> false 。知道如何让coveragerc与nose一起工作吗?好了,在Thomas E Jenkins给出另一个答案后,我重新测试了它,当前的coverage版本不再有这种行为。因此,没有办法再包含.coveragerc文件了?如何从测试中排除项目?@digitaldavenyc coverage.py仍然支持.coverage.c文件。如果您遇到问题,让我们开始另一个线程。请尝试使用--cover erase
,完全删除以前的数据<代码>[report]
取消每个文件的报告,但不更改%计算<代码>[run]
适合我。