Velvet Star Monitor

Standout celebrity highlights with iconic style.

news

ImportError: No module named mock

Writer 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 mock

I tried:

pip install mock

It's still not working.

3

7 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.

1

For Python 2.7:

Install mock:

pip install mock

Then 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 MagicMock

or, 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 mock

to

from unittest import mock

Or you can keep all the code the same and run this shell command instead:

pip install mock

This 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.

0

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.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.