Skip to content

Instantly share code, notes, and snippets.

@drfill
Forked from msabramo/multiple_mocks.py
Created August 16, 2018 15:38
Show Gist options
  • Save drfill/7b37566df941422b4ed590d0a5abba38 to your computer and use it in GitHub Desktop.
Save drfill/7b37566df941422b4ed590d0a5abba38 to your computer and use it in GitHub Desktop.
A Python context manager for doing multiple mock.patches
@contextlib.contextmanager
def multiple_mocks(mock_specs):
"""
`mock_specs` is a dict of mock target name => mock patch kwargs
Example usage:
with multiple_mocks(
{'os.path.exists': {'side_effect': mock_path_exists},
'subprocess.Popen': {},
'os.symlink': {}}):
do_stuff()
"""
_mocks = []
for target, mock_patch_kwargs in mock_specs.items():
_mock = mock.patch(target, **mock_patch_kwargs)
_mock.start()
_mocks.append(_mock)
yield
for _mock in _mocks:
_mock.stop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment