使用 pytest.raises 启用异常实例的插件
项目描述
pytest-葡萄干
插件为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直接使用新功能进行了猴子补丁。要在没有新内容的情况下暂时执行,请使用pytest -p no:pytest-raisin。
pytest.raises的各种遗留形式将继续工作,回退到原始实现。
高级用法
在大多数用例中,如果args属性具有匹配的元组,则将异常视为等效的默认行为应该是令人满意的。但是,一些 3rd-party 异常类在它们内部有额外的逻辑(例如 Django 的ValidationError),您可能希望在此处提供更自定义的断言。
插件用户可以通过 pytest-raisin 的装饰器工厂注册他们自己的错误/可调用对象:
@pytest.register_exception_compare(MyError)
def my_error_compare(exc_actual, exc_expected):
...
您的比较函数将使用参数exc_actual和exc_expected 调用,这两个参数都是MyError的直接实例(如果类型不完全匹配,则测试将提前失败)。如果认为实例不匹配,此函数应检查实例并使用有用的上下文消息引发AssertionError 。如果异常应该被认为是等效的,它应该什么都不做(即返回None )。
注意:当使用异常实例作为pytest.raises的参数时,不允许使用子类的实例。如果要允许子类化,请使用传递类型的原始语法。
项目详情
关
pytest_raisin -0.4-py2.py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | b58b3c9258f07478e1b21ee074669ed66000e2633126b088edfa3cf0db8b60c0 |
|
| MD5 | 7486bd20f7dfad2c32a1f4851747caae |
|
| 布莱克2-256 | ebac0119ea187d94a716b40dbe6de66c3b48c9f87e9c3b080913a15076a8ee62 |