Mediummocktesting
Что такое mock и unittest.mock?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Mock — объект, заменяющий реальный для тестирования. unittest.mock (built-in): Mock, MagicMock, patch.
from unittest.mock import patch, MagicMock
# patch — временная замена
with patch('app.module.Class.method') as mock_method:
mock_method.return_value = 42
result = Class.method() # 42
mock_method.assert_called_once()
# MagicMock — с magic methods
m = MagicMock()
m.__len__.return_value = 5
len(m) # 5
# side_effect — callable, исключение, или sequence
mock.side_effect = [1, 2, 3] # последовательность return
mock.side_effect = ValueError('boom') # бросить исключениеspec=RealClass— Mock с теми же атрибутами (AttributeError если нет);patch.object,patch.dict,patch.multiple;- assert:
assert_called_with(args),assert_called_once,assert_not_called; - pytest-mock:
def test(mocker): mocker.patch('app.db.query');
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.