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

Fre*_*oth 30 python code-coverage mocking nose python-mock

我目前尝试使用模拟库在python中编写一些基本的鼻子单元测试.

在完成了一些基本的例子后,我现在尝试使用nosetests --with-coverage,现在我有了模拟包,我试图'模拟掉'的包显示在覆盖率报告中.是否有可能排除这些?

这是我要测试的类:

from imaplib import IMAP4

class ImapProxy:
    def __init__(self, host):
        self._client = IMAP4(host)
Run Code Online (Sandbox Code Playgroud)

和测试用例:来自模拟导入补丁

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")
Run Code Online (Sandbox Code Playgroud)

我现在得到以下输出 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]
Run Code Online (Sandbox Code Playgroud)

有没有办法排除模拟包和imaplib包,不必手动将除了那些包之外的所有包列入白名单--cover-package=PACKAGE

感谢Ned Batchelder,我现在知道.coveragerc文件了,谢谢!

我创建了一个包含以下内容的.coveragerc文件:

[report]
omit = *mock*
Run Code Online (Sandbox Code Playgroud)

现在我在覆盖率报告中的模拟输出是:

mock                     1240   1240     0%   16-2356
Run Code Online (Sandbox Code Playgroud)

它不再涵盖模拟包,但仍在报告中显示.

如果这是任何帮助,我使用Coverage.py,版本3.5.2.

Ned*_*der 32

创建一个.coveragerc文件,该文件排除报告中不需要的内容:http://nedbatchelder.com/code/coverage/config.html

  • 我面临着类似的问题,并创建了一个包含内含和遗漏的`coveragerc`文件.但是,鼻子似乎没有考虑它,并继续在所有Python的库上运行覆盖(尽管在配置文件中`cover_pylib`被设置为'False`).知道怎么让coveragerc用鼻子工作吗? (3认同)

小智 14

在.coveragerc中将您的omit条目从该[report]部分移动到该[run]部分.