Using unittest.mock to patch input() in Python 3
__builtin__ module is renamed to builtins in Python 3. Replace as follow:
@patch('builtins.input', lambda *args: 'y')
UPDATE
input
has an optional parameter. updated the code to accept the optional parameter.
For Python 2.x:
@patch('__builtin__.input')
worked for me.
Or use Mock's return_value
attribute. I couldn't get it to work as a decorator, but here's how to do it with a context manager:
>>> import unittest.mock
>>> def test_input_mocking():
... with unittest.mock.patch('builtins.input', return_value='y'):
... assert input() == 'y'
...
>>> def test_input_mocking():
... with unittest.mock.patch('builtins.input', return_value='y'):
... assert input() == 'y'
... print('we got here, so the ad hoc test succeeded')
...
>>> test_input_mocking()
we got here, so the ad hoc test succeeded
>>>