Я пытаюсь исправить менеджер контекста, который выполняет поиск в базе данных и возвращает объект следующим образом:
class MyClass:
@contextlib.contextmanager
def client_ctx(self, id):
# hidrate from DB and yield object
yield client # instance of SQAlchemy model Client
def run(self, id):
with self.client_ctx(id) as cl:
# do work here
Класс клиента в этом случае является моделью SQLAlchemy.
В моем тесты Я пытаюсь пропатчить этот метод client_ctx
, чтобы просто вернуть объект, созданный в тестах, как это:
@patch('MyClass.client_ctx')
def test_ctx(self, _mocked_ctx_manager):
myclass = MyClass()
client = Client(
id=1,
code='test-client')
_mocked_ctx_manager.__enter__.return_value = client
myclass.run(1)
Я получаю: TypeError: Object of type MagicMock is not JSON serializable
, что не имеет смысла для меня. Что я делаю не так, есть ли лучший способ издеваться над менеджером контекста?