插件启用使用pytest.raises异常实例
项目描述
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_actual 和 exc_expected 被调用,这两个参数都将直接是 MyError 的实例(如果类型不是完全匹配,测试将在之前失败)。此函数应检查实例,并在它们被认为不匹配的情况下引发一个带有有用上下文信息的 AssertionError。如果异常应被视为等效,则应不执行任何操作(即返回 None)。
注意:在使用异常实例作为 pytest.raises 的参数时,不允许使用子类的实例。如果您想允许子类化,请使用传递类型的原始语法。
项目详情
关闭
pytest-raisin-0.4.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9a247cb8a22d8bc4c23b060bea7b9d5cff1d83b828e59fcfd5779b371078fc8f |
|
MD5 | 04e083cdd922a7dfaef2f5f67196c80b |
|
BLAKE2b-256 | 06d2b5cb736db9bb5afadfef53cbe64c23f34570f6ba540b2e82357b324ed49c |
关闭
pytest_raisin-0.4-py2.py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b58b3c9258f07478e1b21ee074669ed66000e2633126b088edfa3cf0db8b60c0 |
|
MD5 | 7486bd20f7dfad2c32a1f4851747caae |
|
BLAKE2b-256 | ebac0119ea187d94a716b40dbe6de66c3b48c9f87e9c3b080913a15076a8ee62 |