ImportError: No module named mock
Question:
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 mock
I tried:
pip install mock
It’s still not working.
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 MagicMock
but
from mock import MagicMock
Edit: mock
has been included in the unittest
module (since Python3.3), and can be imported by import unittest.mock
.
For your version, I would suggest go to http://hg.python.org/cpython/file/default/Lib/unittest/mock.py and use this source to your advantage.
For Python 2.7:
Install mock:
pip install mock
Then in the test code, use this import:
from mock import patch, MagicMock
For some reason, import unittest.mock
did not work for me, I had to do
from unittest import mock
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 MagicMock
or, if you don’t want to import sys
try:
from unittest.mock import MagicMock
except ImportError:
from mock import MagicMock
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
.
If you’re using Python 3.3+, change
import mock
to
from unittest import mock
On older versions of Python, don’t change anything in the code and run this shell command instead:
pip install mock
This import 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.
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 mock
I tried:
pip install mock
It’s still not working.
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 MagicMock
but
from mock import MagicMock
Edit: mock
has been included in the unittest
module (since Python3.3), and can be imported by import unittest.mock
.
For your version, I would suggest go to http://hg.python.org/cpython/file/default/Lib/unittest/mock.py and use this source to your advantage.
For Python 2.7:
Install mock:
pip install mock
Then in the test code, use this import:
from mock import patch, MagicMock
For some reason, import unittest.mock
did not work for me, I had to do
from unittest import mock
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 MagicMock
or, if you don’t want to import sys
try:
from unittest.mock import MagicMock
except ImportError:
from mock import MagicMock
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
.
If you’re using Python 3.3+, change
import mock
to
from unittest import mock
On older versions of Python, don’t change anything in the code and run this shell command instead:
pip install mock
This import 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.