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 подскажет развёрнутый ответ в реальном времени.