如何从蟒蛇覆盖报告使用nosetests排除模拟包(How to exclude mock pack

2019-06-27 13:41发布

我目前尝试使用模拟库来编写一些基本的单元测试代码的鼻子在蟒蛇。

在完成一些基本的例子之后,我现在试图用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]

有什么办法来排除模拟包和imaplib包,而无需通过手动白名单,但所有这些软件包--cover-package=PACKAGE

由于斯内德尔德我现在了解的.coveragerc文件,感谢您的!

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

[report]
omit = *mock*

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

mock                     1240   1240     0%   16-2356

它不包括模拟包不再,但仍显示它在报告中。

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

Answer 1:

创建排除你不想在报告什么.coveragerc文件: http://nedbatchelder.com/code/coverage/config.html



Answer 2:

在你.coveragerc移动你omit从入门[report]部分的[run]部分。



Answer 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)



文章来源: How to exclude mock package from python coverage report using nosetests