pytest测试用例编写----预期的异常测试(Expecting Exceptions)

在pytest中测试预期的异常使用pytest.raises。
 
with pytest.raises(TypeError):
  tasks.add(task='not a Task object')
  上面这个语句的意思是:无论什么时候,当tasks.add(task='not a Task object')抛出TypeError时,测试通过;当tasks.add(task='not a Task object')没有抛出异常,或者抛出的异常不是TypeError类的异常时,都是失败的。
 
​with​ pytest.raises(ValueError) ​as​ excinfo:
​    tasks.start_tasks_db(​'some/great/path'​, ​'mysql'​)

  注:在包含pytest.raises()的with语句块中,要抛出异常的语句一定是最后一个语句,如果不是,抛出异常语句后面的语句不会执行;上例中,在tasks.start_tasks_db(​'some/great/path'​, ​'mysql'​)后面如果有其他语句的话,都不会执行;(更多详细信息使用help(pytest.raises)查看,使用前先import pytest)

  with pytest.raises(ValueError) :使用with语句进行上下文管理,调用pytest的raises方法可以得到一个ExceptionInfo类型的返回值,这个返回值包含了ValueError异常发生时的所有上下文信息,我们可以使用他们来判断异常的发生是否符合预期。
exception_msg = excinfo.value.args[0]
    ​assert​ exception_msg == ​"db_type must be a 'tiny' or 'mongo'"

  注:ExceptionInfo类型继承自Python的基本异常类Exception,它主要使用的3个属性是:type,value和traceback;上例中就是读取了value属性中的args属性(捕获异常提供的参数列表)。python基础异常类Exception的默认行为是接受所有传递的参数并将它们以元组形式存储在 .args 属性中。

  关于python使用基本异常类Exception的args属性的补充说明;详见URL:https://blog.csdn.net/Enjolras_fuu/article/details/83629064

 

 

以下实例说明了Exceptioninfo类型常用的三个属性(value、type和traceback)的用法:

 

运行:pytest -s -k "raise" test_pytest_example.py

说明:

  type属性:是指捕获的异常是那种类型如:ValueError,TypeError等
  Value属性:记录了捕获的异常返回的信息,它的args属性是一个列表用于读取异常信息
  traceback属性:捕获异常的运行跟踪信息。

 

posted @ 2020-05-21 14:44  给自己一个改变的理由  阅读(1362)  评论(0编辑  收藏  举报