mock

Mock

class mock.Mock([return_value])

Простой мок класс

  • return_value - возвращаемое значение
mock_obj = Mock()
mock_obj_foo = mock_obj.foo
class py

class A:

def get_x(self):
return 100
def get_y(self):
return 100
def compute(self):
return self.get_x() + self_get_y()

a = A() mock_obj2 = Mock()

a.get_x = mock_obj2.get_x a.get_y = mock_obj2.get_y

a.get_x.return_value = 200 a.get_y.return_value = 200

a.compute() # 400

mock_obj2.mock_calls == [call.get_x(), call.get_y()]

# патчим input
__builtins__.input = Mock(return_value=100)
input()
# 100

# если какой-то модуль не доступен, мокаем и его
import sys
sys.modules['some_module'] = Mock()
return_value

Атрибут хранит значение, которое вернет мок объект при уго вызове

MagicMock

class mock.MagicMock

Наследник Mock, расширенный реализацией магических методово питона

patch

mock.patch(target, new=MagicMock)

Возвращает новый патченный объект

with patch('__main__.A.get_x', new=Mock(return_value=500)):
    a = A()
    a.compute()
    # 600

with patch('__main__.A.get_x') as mock_A_get_x:
    mock_A_get_x.return_value = 400

    a = A()
    a.compute()
    # 600