Skip to content

Instantly share code, notes, and snippets.

@manuelzs
Created October 2, 2015 14:01
Show Gist options
  • Select an option

  • Save manuelzs/720d3a5cf4bf9e09c7e7 to your computer and use it in GitHub Desktop.

Select an option

Save manuelzs/720d3a5cf4bf9e09c7e7 to your computer and use it in GitHub Desktop.
Mock subprocess.Popen with context manager
import subprocess
from contextlib import contextmanager
from mock import Mock, MagicMock
@contextmanager
def popen_mock():
"""
Context manager to mock subprocess calls.
Example:
```
with popen_mock() as process_mock:
call_some_fn_that_uses_popen()
assert process_mock.communicate.called
```
"""
orig_popen = subprocess.Popen
subprocess.Popen = MagicMock()
process_mock = Mock()
process_mock.configure_mock(**{
'communicate.return_value': ('ouput', 0),
'wait.return_value': 0,
'returncode': 0,
})
subprocess.Popen.return_value = process_mock
yield process_mock
subprocess.Popen = orig_popen
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment