允许对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正在运行。jar heapdump错误   java如何在安卓画布中弯曲文本区域?   java如何在Gdx 安卓游戏编程中获得矩形的真实触碰位置?   找不到java Spring MVC控制器   在Java中使用双重检查锁定单例扩展类   java在高效的时间和内存中动态执行insert(索引、数据)、delete(索引)、getAt(索引)操作。   java 安卓 Toast和视图帮助   java协议缓冲区:从文件中读取所有序列化消息   java如何在Jackson中为参数化接口类型执行通用自定义反序列化程序   与简单的空检查相比,使用(平面)映射的java优势是什么?   异步方法seam中的java Get contextparam   jar使用相同的java运行时运行另一个java程序   java访问Spring批处理中的作业参数   java给定字符串为空或null   在h2数据库1.4中找不到java类“org.h2.fulltext.FullTextLucene”。*不适用于Lucene Core 4*   java Spring Boot在使用@enableSync时不响应任何请求   java错误:在bash上找不到或加载主类pj2   “返回对象”和“返回(对象)”之间的Java差异   java Android开发:如何使用onKeyUp?