繁体   English   中英

运行nosetests警告错误?

[英]Run nosetests with warnings as errors?

从命令行运行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命令行选项,它在每次测试之前warnings.simplefilter('error') (并在之后清除它)。

任何涉及在测试代码中使用warnings模块的解决方案似乎都失败了。 我不想手动编辑每个测试模块以将警告转换为错误。 另外,我不希望每个测试模块的作者都忘记“打开”警告错误。

nosetests是一个小的Python脚本。 用编辑器打开它,并在第一行的末尾添加-W error 这告诉Python解释器将警告转换为异常。

更简单的是使用Python环境变量来“将警告视为错误”标记:

PYTHONWARNINGS=error nosetests test/test_*.py --pdb

@khinsen的答案有很多帮助,但如果在测试发现期间发出以下警告(用户不可见),则会使nosetests的执行停止:“ImportWarning:不导入目录'XXX':缺少__init__.py

此外,在导入模块期间提出的警告(与测试期间提出的警告相反)不应视为错误。

我在编写插件时遵循@ dbw的建议,可以找到一个github: https//github.com/Bernhard10/WarnAsError

鼻子插件WarnAsError

configureoptions函数prepareTestRunner ,插件实现了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)

我不认为鼻子可以直接控制它:警告模块在发出警告时不会引发异常。 warnings模块使您可以控制应将异常引发的警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM