victory的博客

长安一片月,万户捣衣声

0%

pytest | 异常断言

pytest异常断言

异常断言即测试待测代码段是否会抛出特定的异常。异常断言最常用的两种方式如下:

  1. pytest.raises()
1
2
3
4
5
6
7
8
9
10
import pytest


def test_zero_division():
# pytest.raises(ZeroDivisionError)作为一个上下文管理器(context manageer)断言with后的代码块是否会抛出“ZeroDivisionError”除零异常
with pytest.raises(ZeroDivisionError) as excpinfo:
1 / 0

# 异常信息excpinfo中匹配除零异常信息“division by zero”
assert excpinfo.match("division by zero")
  1. @pytest.mark.xfail
1
2
3
4
5
6
7
def f():
raise IndexError()

# @pytest.mark.xfail(raises=IndexError)是一个python装饰器,用于标记(mark)一个测试用例为预期失败,该例子中若f()函数抛出IndexError异常,则标记该测试为预期失败,测试报告(report)中会报告一个1 xfail,若f()函数未抛出IndexError异常,则测试报告中会报告一个1 xpass
@pytest.mark.xfail(raises=IndexError)
def test_f():
f()

注意:

pytest.mark.xfailraises参数一起使用可能更适合于记录未修复的bug,使用pytest.reises()可能更适合于测试自己的代码故意引发的异常的情况。