运行nosetests警告错误?

Jon*_*ric 16 python warnings unit-testing nose

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
Run Code Online (Sandbox Code Playgroud)

由于我们不希望我们的代码生成警告,我不希望这种情况发生OK.

谢谢!

编辑: 理想情况下,我想要的是一个nosetests命令行选项,它warnings.simplefilter('error')在每次测试之前发出(并在之后清除它).

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

khi*_*sen 10

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

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

PYTHONWARNINGS=error nosetests test/test_*.py --pdb
Run Code Online (Sandbox Code Playgroud)


Ber*_*ard 5

@khinsen 的回答有很大帮助,但如果在测试发现期间发出以下警告(否则用户不可见),则会停止执行鼻子测试:“ImportWarning:未导入目录‘XXX’:丢失 __init__.py

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

我按照@dbw 的建议编写了一个插件,可以在 github 上找到:https : //github.com/Bernhard10/WarnAsError

鼻子插件 WarnAsError

configureoptions函数旁边,插件实现prepareTestRunner,它用一个具有不同 run 方法的类替换默认的 TestRunner :

def prepareTestRunner(self, runner):
    return WaETestRunner(runner)
Run Code Online (Sandbox Code Playgroud)

此类存储原始 TestRunner 并且其run-Method 使用不同的warnings.simplefilter.

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)
Run Code Online (Sandbox Code Playgroud)

  • 您介意提供安装和使用说明吗? (2认同)

Ned*_*der 0

我不认为鼻子可以直接控制这一点:警告模块在发出警告时不会引发异常。该warnings模块使您可以控制应将哪些警告作为异常引发。