def test_divide_by_zero(): with pytest.raises(ValueError) as excinfo: result = divide(10, 0)
assert str(excinfo.value) == "Cannot divide by zero"
这段代码使用pytest.raises
函数来检查divide(10, 0)
函数调用时是否会引发一个带有正确错误消息的ValueError
异常。
具体来说,该代码的作用是:
1.使用with pytest.raises(ValueError) as excinfo:
语句块包含要测试的函数divide
调用,以便检查是否引发了ValueError
异常;
2.使用变量名excinfo
指定捕获到的异常对象,并将其与pytest.raises
函数返回的异常对象绑定,以便之后可以对其进行检查;
3.运行测试函数result = divide(10, 0)
,注意这里10
是被除数,0
是除数,此时除数为0,会抛出一个带有错误消息的ValueError
异常。这个异常被pytest.raises
函数捕获;
4.使用assert str(excinfo.value) == "Cannot divide by zero"
来断言捕获到的异常对象的异常消息为"Cannot divide by zero"
,即检查是否引发的异常是期望的ValueError
异常,以及错误消息是否正确。如果检查通过,测试函数就会通过测试。
需要注意的是,如果在with pytest.raises
代码块之外抛出ValueError
异常,这个异常将不会被捕获并且不会导致测试失败。如果希望在with pytest.raises
之外捕获特定的异常,请使用pytest.raises
函数的match
或exc_info
参数。