Найти - Пользователи
Полная версия: Как замокать функцию?
Начало » Python для новичков » Как замокать функцию?
1
Pit
Есть в файле метод

 db = DataBase()
def some_func(db, text):
    list = обращение к базе
    return list

и надо замокать метод some_func?
JOHN_16
Ну в вышеуказанном куске кода some_func это не метод, а функция.
Замокать можно используя модуль unittest.mock , там есть и patch и сам Mock, вполне хватает примеров.
Pit
JOHN_16
Ну в вышеуказанном куске кода some_func это не метод, а функция.Замокать можно используя модуль unittest.mock , там есть и patch и сам Mock, вполне хватает примеров.
Да,примеров много, но как то не работает!!! С классами писал и все ок, но вот функцию замокать не получается.
Вот пример функций, все просто:
 from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session
from services.DAL.batabase import DataBase
from sqlalchemy.sql import update
class Message:
    def __init__(self):
        self.id = None
        self.text = None
LIMIT = 100
def get_list_messages(db):
    session = Session(db.engine)
    try:
        list_messages = session.query(db.message).limit(LIMIT).all()
    except SQLAlchemyError:
        raise
    finally:
        session.close()
    return list_messages
def update_message(db, message):
    session = Session(db.engine)
    try:
        statement = update(db.message).values(text=message.text).where(db.message.id == message.id)
        session.execute(statement)
        session.commit()
    except SQLAlchemyError:
        session.rollback()
    finally:
        session.close()
def run_check(db):
    try:
        list_messages = get_list_messages(db)
        if list_messages:
            for message in list_messages:
                message.text = "DELETE"
                update_message(db, message)
    except Exception as e:
            print(str(e))
db = DataBase()
run_check(db)

И вот пытаюсь замокать функцию:

 from unittest.mock import patch
from unittest.mock import Mock
from unittest.mock import MagicMock
from temp_for_mock import Message, get_list_messages, update_message, run_check
from services.DAL.batabase import DataBase
def create_message(id, text):
    message = Message()
    message.id = id
    message.text = text
    return message
message1 = create_message(1, "message1")
message2 = create_message(2, "message2")
list_messages = [message1, message2]
db = Mock()
with patch('temp_for_mock.get_list_messages') as mock_get_list:
    mock_get_list.return_value = list_messages
list = get_list_messages(db)
print(list)

И вот как минимум сам метод get_list_messages выполняется и закономерная ошибка:
for c in column._select_iterable:
TypeError: ‘Mock’ object is not iterable

Может что то не до понимаю?
py.user.next
Вот пара примеров по перекрытию встроенных функций
пример1
пример2
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB