Python Glossary English

Python 3.3+unittestфункция

unittest.mock.patch()

моки

Декоратор и контекстный менеджер для замены объектов в тестах на фиктивные (mock). Позволяет изолировать тестируемый код от внешних зависимостей.

Синтаксис

from unittest.mock import patch
@patch('module.ClassName')
def test(self, mock_cls): ...

with patch('module.func') as m: ...

Главная ловушка — патчить нужно там, где имя ищут, а не там, где оно определено: если тестируемый модуль сделал у себя импорт имени, подменять надо запись в этом модуле, а патч исходного модуля на него уже не подействует. Когда декораторов несколько, моки приходят в параметры снизу вверх: ближайший к функции @patch соответствует первому аргументу.

Примеры

from unittest.mock import patch
import unittest
class Tests(unittest.TestCase):
    @patch('builtins.input', return_value='42')
    def test_input(self, mock_input):
        self.assertEqual(input(), '42')
        mock_input.assert_called_once()

См. также

Частые ошибки

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