ImportError:没有名为mock的模块

时间:2012-07-16 09:27:03

标签: python python-2.7 python-import importerror

所以我试图使用unittest.mock在我的单元测试中模拟我的一些方法。我这样做:

from unittest.mock import MagicMock
f = open("data/static/mock_ffprobe_response")
subprocess.check_output = MagicMock(return_value=f.read())
f.close()

但我得到了:

ImportError: No module named mock

我试过了:

pip install mock

它还没有用。

7 个答案:

答案 0 :(得分:84)

unittest是一个内置模块; mock是一个外部库(无论如何都是3.3之前的测试版)。通过mock安装pip install后,您不能使用

导入它
from unittest.mock import MagicMock

from mock import MagicMock

编辑:mock已包含在unittest模块中(自Python3.3起),可由import unittest.mock导入。

答案 1 :(得分:12)

对于Python 2.7:

安装模拟:

pip install mock

然后在测试代码中,使用此导入:

from mock import patch, MagicMock

答案 2 :(得分:9)

如果您想同时支持Python 2和Python 3,您还可以使用以下内容:

import sys
if sys.version_info >= (3, 3):
    from unittest.mock import MagicMock
else:
    from mock import MagicMock

或者,如果您不想导入sys

try:
    from unittest.mock import MagicMock
except ImportError:
    from mock import MagicMock

答案 3 :(得分:3)

对于您的版本,我建议您转到http://hg.python.org/cpython/file/default/Lib/unittest/mock.py并使用此来源。

答案 4 :(得分:2)

出于某种原因,import unittest.mock对我不起作用,我必须这样做

from unittest import mock

答案 5 :(得分:1)

更改

root.mainloop

import mock

发生这种情况是因为from unittest import mock is a builtin module从Python 3.3开始,但是有a backport on PyPI用于较旧的版本,您可以将其安装为unittest.mock,然后再导入为{{1 }}。

如果您使用的是Python 3.3或更高版本,则无需进行任何pip安装,只需将其导入为pip install mock

答案 6 :(得分:0)

运行pytest时遇到导入问题。原来,我的pytestpython的2.7版本,而我的virtualenv是3.6 python的版本。我通过在pip install中进行virtualenv的修复,然后使用了pytest中的env/bin/pytest