mock.
Mock
(**kwargs)Простой мок класс
return_value - возвращаемое значение
mock_obj = Mock()
mock_obj_foo = mock_obj.foo
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
Атрибут хранит значение, которое вернет мок объект при уго вызове
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')
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'