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Сообщить о неточности