Как утвердить исключение, которое регистрируется и не влияет на ответную реакцию

Я тестирую API, который может вызвать исключение, но в итоге возвращает ответ, основанный на других вычислениях, не связанных с возникшим исключением (он только регистрирует исключение):

def get(self, request):
    #some code here
    try:
        #do something and create the response value
    except Exception as err:
        logger.exception(str(err))
    return Response

Я попытался проверить, поднимается ли исключение, но это не сработало, так как конечное возвращаемое значение (ответ API) не заботится об исключении:

with pytest.raises(RuntimeError):
    response = MyInfo.as_view(
    )(request)

Я получаю следующее:

>       with pytest.raises(RuntimeError):
E       Failed: DID NOT RAISE <class 'RuntimeError'> 

несмотря на то, что в лог записывается исключение RuntimeError. Я думаю, что pytest заботится только об ответе API, а не об исключении, которое произошло внутри API.

--------- РЕДАКТИРОВАТЬ --------

Есть предложение по использованию caplog. Поскольку я использую @patch в своей тестовой функции, я не могу передать 'caplog' в качестве аргумента функции. Я попробовал этот предложенный метод внутри моего conftest.py следующим образом:

@pytest.fixture() 
def my_caplog(caplog): 
    with caplog.at_level(logging.INFO): 
        yield 
    print(caplog.text)

но ничего не выводится. Не уверен, как использовать его в этом случае.

Обзор светильника caplog?

Один из вариантов - сделать что-то вроде

def test_raises_exception(caplog):
    assert "exception" in caplog.text.lower()

Обновленный пример

import logging
from unittest.mock import patch

class Foo:
    def bar(self):
        pass

class TestFoo:
    @patch.object(Foo, "bar")
    def test_stuff(self, mock_bar, caplog):
        logging.exception("ERROR")
        assert "ERROR" in caplog.text
Вернуться на верх