允许对pytest.raises使用异常实例的插件

pytest-raisin的Python项目详细描述


pypipyversionstravis

pytest葡萄干

将更高级别接口放入pytest.raises的插件。 它允许使用异常instance作为预期值,该值将根据类型和argsattribute与实际异常(如果有)进行比较。

# 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)

如果需要,可以为用户定义的错误子类注册更复杂的比较(请参见Advanced Usage)。

安装

pip install pytest-raisin

基本用法

测试中的用法如下所示

>>>currant_exchange_rates={..."sultana":50,..."raisins":100,...}>>>withpytest.raises(KeyError("grape")):...currant_exchange_rates["grape"]...>>>withpytest.raises(KeyError("sultanas")):...currant_exchange_rates["prunes"]...AssertionError:KeyErrorargsdonotmatch!Actual:('prunes',)Expected:('sultanas',)>>>withpytest.raises(KeyError("Carlos Sultana")):...currant_exchange_rates["sultana"]Failed:DIDNOTRAISEKeyError('Carlos Sultana')

默认情况下,插件是启用的:pytest.raises直接用新功能进行monkeypached。要在没有新内容的情况下临时执行,请使用pytest -pno:pytest-raisin

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

高级使用

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

插件用户可以通过pytest raisin的decorator工厂注册自己的错误/可调用文件:

@pytest.register_exception_compare(MyError)defmy_error_compare(exc_actual,exc_expected):...

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

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
具有作为接口的属性的java Hibernate实体类   在Java中检查int l,r的条件l+1<r的最快方法   java如何更新TornadFX ComboBox Kotlin   java Tomcat未调用控制器api   java在Android Studio中的alertdialog中打开新活动   xml VScode Java/Maven环境问题不同的计算机   java我需要修改循环中的一个文本字符串,这样程序就可以复制粘贴相同的字符串,但数字会增加   java如何从Twilio响应消息中获取内容   从Java5+diamond运算符开始初始化泛型集合的java方法   在java中循环,直到用户按下enter键   java如何找到组件属于哪个面板?   java我想计算一个代码需要的总迭代次数   <data 安卓:type=“*/*”/>不允许使用java字符串类型   解析我有一个带有开始日期和目标日期的字符串,我想在Java中获取日期并保存在变量中   在mongodb中使用ReflectionDBObject类插入java对象?