从命令行运行nosetests
时,如何指定将“非忽略”警告视为错误?
默认情况下,将打印警告,但不会将其计入失败:
[snip]/service/accounts/database.py:151: SADeprecationWarning: Use session.add()
self.session.save(state)
[snip]/service/accounts/database.py:97: SADeprecationWarning: Use session.add()
self.session.save(user)
............
----------------------------------------------------------------------
Ran 12 tests in 0.085s
OK
因为我们不希望我们的代码生成警告,所以我不希望这种情况是OK
。
谢谢!
nosetests编辑:理想情况下,我想要的是一个nosetest命令行选项,它可以在每次测试之前发出一个warnings.simplefilter('error')
(并在之后清除它)。
任何涉及在测试代码中使用warnings
模块的解决方案似乎都没有切中要害。我不想手动编辑每个测试模块来将警告转换为错误。另外,我不希望每个测试模块的作者能够忘记“打开”警告错误。
发布于 2014-01-08 22:25:54
nosetests
是一个小的Python脚本。使用编辑器打开它,并在第一行的末尾添加-W error
。这将告诉Python解释器将警告转换为异常。
更简单的方法是使用Python环境变量注入“视警告为错误”标志:
PYTHONWARNINGS=error nosetests test/test_*.py --pdb
发布于 2015-10-20 21:04:24
@khinsen的回答很有帮助,但如果在测试发现过程中发出以下警告(否则用户看不到),则会使nosetest的执行停止:"ImportWarning:不导入目录'XXX':缺少__init__.py
此外,在导入模块期间引发的警告(与在测试期间引发的警告相反)不应被视为错误。
我遵循@dbw的建议编写了一个插件,可以在github上找到:https://github.com/Bernhard10/WarnAsError
一个鼻部插件WarnAsError
在configure
和options
函数旁边,插件实现了prepareTestRunner
,其中它用一个具有不同run方法的类替换了默认的TestRunner:
def prepareTestRunner(self, runner):
return WaETestRunner(runner)
该类存储原始的TestRunner,它的run
-Method使用不同的warnings.simplefilter
调用原始的TestRunner的run方法。
class WaETestRunner(object):
def __init__(self, runner):
self.runner=runner
def run(self, test):
with warnings.catch_warnings():
warnings.simplefilter("error")
return self.runner.run(test)
发布于 2009-11-11 00:51:55
我不认为nose可以直接控制这一点:当发出警告时,警告模块不会引发异常。warnings
模块允许您控制应将哪些警告作为异常引发。
https://stackoverflow.com/questions/1709388
复制相似问题