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 不是上下文管理器范围的一部分(对于任何上下文管理器的上下文都是如此),因此它在上下文管理器退出后继续存在,使这成为可能。