Mock side effect
# raise exception
mock = Mock(side_effect=KeyError('foo'))
mock()
# KeyError: 'foo'
# return value based on argument
values = {'a': 1, 'b': 2, 'c': 3}
def side_effect(arg):
return values[arg]
mock.side_effect = side_effect
mock('a'), mock('b'), mock('c')
(1, 2, 3)
# return value based on numbers of calls
mock.side_effect = [5, 4, 3, 2, 1]
mock(), mock(), mock()
(5, 4, 3)