允许对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 If语句   java如何在Spark中使用两个“条件”进行过滤?   雅加达ee为ColdFusion提供的最佳Java ee服务器   java如何在jersey的MessageBodyWriter方法中获取writeTo中的anotations值?   java从脚本文件调用jar文件中的函数   java在执行insert语句后,如何获得id值为的语句?   在OS X上设置OpenCV Java绑定   java使用for循环遍历数组x。以字符串形式返回x的元素,其中每个元素由一个空格分隔   ApacheiClientBuilder为Algolia Java创建的APIClient是线程安全的吗?   java在DFS/BFS算法中获取邻居时避免内存分配?   java使用AES/CBC/PKCS5P加密大文件(2GB)   允许保存/加载列布局的Java DB网格组件   队列大小为1的java Spring调度   跑步带有Java参数的exe   java正则表达式将所有“<”和“>”标记替换为“&lt;”及“&gt;”在<<![CDATA]>标签?   java何时同步变量?