跳转到主要内容

插件启用使用pytest.raises异常实例

项目描述

pypi pyversions actions

https://user-images.githubusercontent.com/6615374/50065259-46af2780-017b-11e9-8af3-38f340f11df1.png

pytest-raisin

将更高层次的接口添加到pytest.raises的插件。它允许使用异常实例作为期望值,该值将根据类型和args属性与实际异常(如果有的话)进行比较。

# Old-skool:
with pytest.raises(SystemExit) as cm:
    sys.exit(1)
assert cm.value.args == (1,)

# New hotness:
with pytest.raises(SystemExit(1)):
    sys.exit(1)

如果需要,可以注册更复杂的比较来用于用户定义的错误子类(见高级用法)。

安装

pip install pytest-raisin

基本用法

在测试中的用法如下

>>> currant_exchange_rates = {
...     "sultana": 50,
...     "raisins": 100,
... }
>>> with pytest.raises(KeyError("grape")):
...     currant_exchange_rates["grape"]
...
>>> with pytest.raises(KeyError("sultanas")):
...     currant_exchange_rates["prunes"]
...
AssertionError: KeyError args do not match!
    Actual:   ('prunes',)
    Expected: ('sultanas',)

>>> with pytest.raises(KeyError("Carlos Sultana")):
...     currant_exchange_rates["sultana"]
Failed: DID NOT RAISE KeyError('Carlos Sultana')

插件默认启用:pytest.raises直接与新的功能monkeypatched。要暂时执行不带新功能,请使用pytest -p no:pytest-raisin

pytest.raises的各种旧形式将继续工作,回退到原始实现。

高级用法

在大多数用例中,如果args属性具有匹配的元组,则将异常视为等效的默认行为应该是令人满意的。但是,一些第三方异常类在其内部有额外的逻辑(例如Django的ValidationError),您可能希望在这里提供更定制的断言。

插件用户可以通过pytest-raisin的装饰器工厂注册他们自己的错误/可调用

@pytest.register_exception_compare(MyError)
def my_error_compare(exc_actual, exc_expected):
    ...

您的比较函数将使用参数 exc_actualexc_expected 被调用,这两个参数都将直接是 MyError 的实例(如果类型不是完全匹配,测试将在之前失败)。此函数应检查实例,并在它们被认为不匹配的情况下引发一个带有有用上下文信息的 AssertionError。如果异常应被视为等效,则应不执行任何操作(即返回 None)。

注意:在使用异常实例作为 pytest.raises 的参数时,不允许使用子类的实例。如果您想允许子类化,请使用传递类型的原始语法。

项目详情


下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

pytest-raisin-0.4.tar.gz (3.7 kB 查看哈希)

上传时间

构建分布

pytest_raisin-0.4-py2.py3-none-any.whl (4.6 kB 查看哈希)

上传时间 Python 2 Python 3

支持者: