为什么nosetests说--with-coverage不是一个选择?

时间:2012-11-09 07:20:05

标签: python unit-testing code-coverage nosetests coverage.py

我正在使用nosetests来自动发现和运行我的单元测试。我还想让它生成报道报告。

当我使用以下命令运行nosetests时,一切正常

nosetests .

我在网上查询生成覆盖率,nosetests有一个命令行参数--with-coverage。我还使用nosetests --help仔细检查了此命令是否存在。但是,每当我运行以下命令时,我都会得到以下输出

nosetests --with-coverage .
Usage: nosetests [options]

nosetests: error: no such option: --with-coverage

我仔细检查了通过运行

安装了coverage插件
nosetests --plugins

封面显示在列表中以及一堆其他插件。

我也知道我安装了覆盖,因为我可以使用以下内容手动运行覆盖数据集:

coverage run test.py

我是否滥用了--with-coverage选项?或者还有其他我想念的东西?

提前致谢。

3 个答案:

答案 0 :(得分:3)

您的语法是正确的。这可能是您的环境问题,请仔细检查您的python环境以及安装了鼻子和覆盖范围的位置。作为完整性检查,您可以快速设置新的virtualenv,安装鼻子,并使用coverage选项运行命令。

答案 1 :(得分:3)

我从未让命令行选项正常工作。我做了Janne Karila建议的并在我的项目主目录中创建了一个setup.cfg文件。一旦我有了这个文件,我就可以运行没有参数的nosetests,一切都会运行。

尝试创建文档时遇到的一个问题是我无法弄清楚配置中允许的参数。但事实证明,可以使用此处列出的任何命令https://nose.readthedocs.org/en/latest/usage.html#options。在命令之前留下双破折号。

作为参考,我当前的配置文件是

[nosetests]
verbosity=1
detailed-errors=1
with-coverage=1
cover-erase=1
cover-package=application
cover-html=1
cover-html-dir=htmlcov
where=tests

此配置文件表示使用coverage,删除上一次运行的覆盖范围,仅报告应用程序包中的文件,并将html报告输出到htmlcov目录。

希望将来可以帮助其他人。

答案 2 :(得分:3)

nose 1.3.7开始 - most recent version available on Pypy - 该命令不存在:

https://github.com/nose-devs/nose/blob/release_1.3.7/nose/plugins/cover.py

看起来文档是从项目的master分支生成的,确实有这些选项:

https://github.com/nose-devs/nose/blob/master/nose/plugins/cover.py

可以做的是从主分支安装nose,如下所示:

pip install git+https://github.com/nose-devs/nose@master --upgrade

它会说它刚刚安装了1.3.7,但这仅仅是因为版本尚未在项目setup.py文件中出现问题:https://github.com/nose-devs/nose/blob/master/setup.py#L4

请记住,您刚刚安装了未发布的nose版本,可能还有其他错误。