Python Glossary English

Python 3.3+unittestпонятие

MagicMock

моки

Универсальный мок-объект, поддерживающий магические методы (__len__, __iter__ и т.д.). Позволяет имитировать любой объект без создания реальной зависимости.

Синтаксис

from unittest.mock import MagicMock
m = MagicMock()
m.method.return_value = 42

Любой атрибут MagicMock рождается на лету, поэтому опечатка в имени метода тест не уронит — вернётся очередной мок, и проверка молча пройдёт; чтобы такое ловить, задавайте spec= или стройте мок через create_autospec() по реальному объекту. Отличие от обычного Mock — заранее настроенные магические методы: длина равна 0, итерация пуста, объект истинный, тогда как Mock на len() и итерацию ответил бы TypeError.

Примеры

from unittest.mock import MagicMock
db = MagicMock()
db.query.return_value = [1, 2, 3]
result = db.query('SELECT *')
print(result)  # [1, 2, 3]
db.query.assert_called_with('SELECT *')
print(len(db))  # 0 (магический метод)

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности