用于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
?