I currently try to use the mock library to write some basic nose unittests in python.
After finishing some basic example I now tried to use nosetests --with-coverage
and now I have the mock package and the package I tried to 'mock away' are shown in the coverage report. Is there a possibility to exclude these?
Here is the class I want to test:
from imaplib import IMAP4
class ImapProxy:
def __init__(self, host):
self._client = IMAP4(host)
And the testcase: from mock import patch
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")
I now get the following output for 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]
Is there any way to exclude the mock package and the imaplib package without having to manually whitelisting all but those packages by --cover-package=PACKAGE
Thanks to Ned Batchelder I now know about the .coveragerc file, thanks for that!
I created a .coveragerc file with the following content:
[report]
omit = *mock*
Now my output for mock in the coverage report is:
mock 1240 1240 0% 16-2356
It does not cover the mock package any longer but still shows it in the report.
I use Coverage.py, version 3.5.2 if this is any help.
In your .coveragerc move your
omit
entry from the[report]
section to the[run]
section.I had a similar situation testing a series of sub-packages within my main package directory. I was running
nosetests
from within the top directory of my module andMock
and other libraries were included in the coverage report. I tried using--cover-module my_package
in nosetests, but then the subpackages were not included.Running the following solved my problem:
So, if all the code that you want to test is in the same directory, then you can get coverage for it alone by specifying the module path to
nosetests
. This avoids the need to whitelist each of the submodules individually.(Python 2.7.6, coverage 4.0.3, nose 1.3.7)
Create a .coveragerc file that excludes what you don't want in the report: http://nedbatchelder.com/code/coverage/config.html