5.3. Test MockΒΆ

In following example we simulate input() built-in function with MagicMock. Then, usage of input() is as normal.

>>> from unittest.mock import MagicMock
>>>
>>>
>>> input = MagicMock(return_value='Mark Watney')
>>>
>>> input('What is your name?: ')
'Mark Watney'

Using MagicMock you can simulate more than one future input values from user:

>>> from unittest.mock import MagicMock
>>>
>>>
>>> input = MagicMock(side_effect=['red', 'green', 'blue'])
>>>
>>> input('Type color: ')
'red'
>>> input('Type color: ')
'green'
>>> input('Type color: ')
'blue'

Mocks has advantage over stubs, because they collect some diagnostic information.

>>> input.called
True
>>> input.call_count
3
>>> input.mock_calls  
[call('Type color: '),
 call('Type color: '),
 call('Type color: ')]