如何使用nosetest查找未经测试的Python文件的覆盖范围?

时间:2017-09-27 09:07:06

标签: python nose coverage.py

用于Python测试的nosetests工具有一个选项--cover-inclusive,可以包含所有能够在测试中发现漏洞的文件(请参阅documentation)。但是,它似乎无法正常工作:它根本不显示覆盖率为0%的文件,而只运行coverage工具而不是nosetests可以完成这项工作。

以下是重现问题的最小示例文件夹结构:

__init__.py
foobar/__init__.py
foobar/foo.py       # Has one function
foobar/bar.py       # Has one function
test_bar.py         # Tests only the function in foobar/bar.py

使用nosetests运行时,我得到以下结果:

$ nosetests --cover-package=foobar --with-coverage --cover-inclusive
Name                 Stmts   Miss  Cover
----------------------------------------
foobar/__init__.py       0      0   100%
foobar/bar.py            2      0   100%
----------------------------------------
TOTAL                    2      0   100%
----------------------------------------------------------------------

这不显示foobar/foo.py缺少的测试。但是,直接运行coverage可以完成任务:

$ coverage run --source=. --omit=test* -m unittest discover && coverage report
Name                 Stmts   Miss  Cover
----------------------------------------
__init__.py              0      0   100%
foobar/__init__.py       0      0   100%
foobar/bar.py            2      0   100%
foobar/foo.py            2      2     0%
----------------------------------------
TOTAL                    4      2    50%

删除nosetests选项时,--cover-inclusive的此行为不会发生变化。我发现包含foobar/foo.py的唯一方法是设置--cover-package=.,但这样也会显示包含所有其他文件。

--cover-inclusive选项是否已损坏或我做错了什么?如何从coverage run获得与上面显示的相同的输出,然后使用nosetests

0 个答案:

没有答案