ImportError: No module named mock
Sophia Terry
So I am trying to use unittest.mock to mock some of my methods in my unit tests. I do:
from unittest.mock import MagicMock
f = open("data/static/mock_ffprobe_response")
subprocess.check_output = MagicMock(return_value=f.read())
f.close()But I am getting:
ImportError: No module named mockI tried:
pip install mockIt's still not working.
37 Answers
unittest is a built-in module; mock is an external library (pre-3.3 betas, anyway). After installing mock via pip install, you import it not by using
from unittest.mock import MagicMockbut
from mock import MagicMockEdit: mock has been included in the unittest module (since Python3.3), and can be imported by import unittest.mock.
For Python 2.7:
Install mock:
pip install mockThen in the test code, use this import:
from mock import patch, MagicMock If you want to support both, Python 2 and Python 3, you can also use following:
import sys
if sys.version_info >= (3, 3): from unittest.mock import MagicMock
else: from mock import MagicMockor, if you don't want to import sys
try: from unittest.mock import MagicMock
except ImportError: from mock import MagicMock If you're using Python 3.3+, change
import mockto
from unittest import mockOr you can keep all the code the same and run this shell command instead:
pip install mockThis command works on any Python version but changing the code is preferable because then other people running your code won't run into that import error anymore.
This error happens because unittest.mock was added in Python 3.3, and there is a backport on PyPI for older Python versions. So if your code used to be Python 2, it's probably trying to import the backport.
pyupgrade is a tool you can run on your code to rewrite those imports and remove other no-longer-useful leftovers from Python 2.
For some reason, import unittest.mock did not work for me, I had to do
from unittest import mock 0 I was facing issues on import when running pytest. It turned out to be my pytest was of 2.7 version of python, while my virtualenv was a 3.6 python. I fixed it by doing a pip install from my virtualenv and then using the pytest from env/bin/pytest.
For your version, I would suggest go to and use this source to your advantage.