mock¶
Mock()¶
- class
mock.
Mock
(**kwargs)¶ Простой мок класс
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()]
def side_effect(arg): return { 'a': 1, 'b': 2, } mock.side_effect = side_effect mock('a'), mock('b') # (1, 2)
mock.side_effect = [5, 4, 3] mock(), mock() # (5, 4)
# патчим input __builtins__.input = Mock(return_value=100) input() # 100 # если какой-то модуль не доступен, мокаем и его import sys sys.modules['some_module'] = Mock()
-
return_value
¶ Атрибут хранит значение, которое вернет мок объект при уго вызове
MagicMock()¶
- class
mock.
MagicMock
¶ Наследник
Mock
, расширенный реализацией магических методово питонаthing = Thing() thing.method = MagicMock(return_value=3) thin.method2 = MagicMock(side_effect=KeyError('foo')
-
assert_called_with
()¶ thing.method(3, 4, 5, key='value') # 3 thing.assert_called_with(3, 4, 5, key='value')
-
patch()¶
-
mock.
patch
(**kwargs)¶ target
new = DEFAULT
spec = None
create = False
spec_set = None
autospec = None
new_callable = None
Возвращает новый патченный объект
unittest.mock.MagicMock()
with patch('__main__.A.get_x', new=Mock(return_value=500)): pass with patch('__main__.A.get_x') as mock_A_get_x: mock_A_get_x.return_value = 400 @patch('myapp.settings.SOME_VALUE', 99) def test(): pass @patch('myapp.settings.some_method2') @patch('myapp.settings.some_method') def test(mock_some_method, mock_some_method2): mock_some_method.return_value = '123' mock_some_method.assert_called() mock_some_method.assert_called_once_with('foo') @patch('myapp.settings.Class.property', new_callable=PropertyMock) def test(mock_property): mock_property.return_value = '123'