如何使用测试从python覆盖率报告中排除模拟包

如何使用测试从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

我目前尝试使用mock库用python编写一些基本的nose单元测试

在完成一些基本示例之后,我现在尝试使用
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]
适合我。