ImportError: No module named mock

PythonPython 2.7Python ImportImporterror

Python Problem Overview


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.

Python Solutions


Solution 1 - Python

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.

Solution 2 - Python

For Python 2.7:

Install mock:

pip install mock

Then in the test code, use this import:

from mock import patch, MagicMock

Solution 3 - Python

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

Solution 4 - Python

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.

Solution 5 - Python

For some reason, import unittest.mock did not work for me, I had to do

from unittest import mock

Solution 6 - Python

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.

Solution 7 - Python

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRichard KnopView Question on Stackoverflow
Solution 1 - PythonDSMView Answer on Stackoverflow
Solution 2 - PythonDrewView Answer on Stackoverflow
Solution 3 - PythonLSchuelerView Answer on Stackoverflow
Solution 4 - PythonBoris VerkhovskiyView Answer on Stackoverflow
Solution 5 - PythonfriederbluemleView Answer on Stackoverflow
Solution 6 - PythonjosephView Answer on Stackoverflow
Solution 7 - PythonavasalView Answer on Stackoverflow