pytest.raises 上下文管理器未捕获异常值
Exception value is not being caught in pytest.raises context manager
当我尝试获取异常的值时,该值未正确断言。
import pytest
class CustomException(Exception):
"""Custom Exception"""
def raise_custom_exception():
raise CustomException("This is a test exception")
def test_custom_exception():
with pytest.raises(CustomException) as execinfo:
raise_custom_exception()
assert execinfo == "This is not being caught"
我正在检查异常的值是否与预期值相同,但 pytest 显示所有测试都通过了,即使异常的预期值不正确也是如此。
➜ Whosebug_question pytest main.py
======================= test session starts ==========================
platform darwin -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: /Users/israteneda/Whosebug_question
collected 1 item
main.py . [100%]
====================== 1 passed in 0.01s =============================
pytest.raises
上下文管理器在引发异常时退出 - 如果没有引发异常(并在这种情况下引发断言),它只会执行到最后。因此,要在引发异常后检查任何其他内容,您必须在上下文管理器之外执行此操作:
def test_custom_exception():
with pytest.raises(CustomException) as execinfo:
raise_custom_exception()
assert execinfo == "This is being caught"
execinfo
不是上下文管理器范围的一部分(对于任何上下文管理器的上下文都是如此),因此它在上下文管理器退出后继续存在,使这成为可能。
当我尝试获取异常的值时,该值未正确断言。
import pytest
class CustomException(Exception):
"""Custom Exception"""
def raise_custom_exception():
raise CustomException("This is a test exception")
def test_custom_exception():
with pytest.raises(CustomException) as execinfo:
raise_custom_exception()
assert execinfo == "This is not being caught"
我正在检查异常的值是否与预期值相同,但 pytest 显示所有测试都通过了,即使异常的预期值不正确也是如此。
➜ Whosebug_question pytest main.py
======================= test session starts ==========================
platform darwin -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: /Users/israteneda/Whosebug_question
collected 1 item
main.py . [100%]
====================== 1 passed in 0.01s =============================
pytest.raises
上下文管理器在引发异常时退出 - 如果没有引发异常(并在这种情况下引发断言),它只会执行到最后。因此,要在引发异常后检查任何其他内容,您必须在上下文管理器之外执行此操作:
def test_custom_exception():
with pytest.raises(CustomException) as execinfo:
raise_custom_exception()
assert execinfo == "This is being caught"
execinfo
不是上下文管理器范围的一部分(对于任何上下文管理器的上下文都是如此),因此它在上下文管理器退出后继续存在,使这成为可能。