ImportError:没有名为 mock 的模块

ImportError: No module named mock

提问人:Richard Knop 提问时间:7/16/2012 最后编辑:firelynxRichard Knop 更新时间:9/19/2023 访问量:136037

问:

因此,我正在尝试使用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

它仍然不起作用。

python-2.7 python-import import 错误

评论

1赞 avasal 7/16/2012
该模块在 3.3 版中可用,您的版本是什么
1赞 Richard Knop 7/16/2012
我的版本是 2.7。还有其他选择吗?
1赞 Richard Knop 7/16/2012
根据 Google 的说法,这应该也适用于 2.7。

答:

130赞 DSM 7/16/2012 #1

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

from unittest.mock import MagicMock

from mock import MagicMock

编辑:已包含在模块中(从 Python3.3 开始),可以通过 导入。mockunittestimport unittest.mock

评论

1赞 6/4/2020
在 Python 3.3+ 上,您需要执行与此答案建议相反的操作:from unittest.mock import MagicMock
3赞 avasal 7/16/2012 #2

对于您的版本,我建议您去 http://hg.python.org/cpython/file/default/Lib/unittest/mock.py 并利用此资源来发挥您的优势。

24赞 Drew 9/21/2017 #3

对于 Python 2.7:

安装 mock:

pip install mock

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

from mock import patch, MagicMock
8赞 friederbluemle 4/22/2018 #4

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

from unittest import mock
16赞 LSchueler 6/4/2018 #5

如果要同时支持 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
5赞 joseph 3/15/2019 #6

我在运行时遇到导入问题。原来是我的 2.7 版本,而我的是 3.6 。我通过执行 from my 然后使用 from .pytestpytestpythonvirtualenvpythonpip installvirtualenvpytestenv/bin/pytest

17赞 user3064538 11/8/2019 #7

如果您使用的是 Python 3.3+,请更改

import mock

from unittest import mock

或者,您可以保持所有代码相同,并改为运行以下 shell 命令:

pip install mock

此命令适用于任何 Python 版本,但最好更改代码,因为这样运行代码的其他人将不再遇到该导入错误。

发生此错误的原因是 unittest.mock 是在 Python 3.3 中添加的,并且 PyPI 上有一个用于旧 Python 版本的向后移植。因此,如果您的代码曾经是 Python 2,它可能正在尝试导入向后移植。


pyupgrade 是一个工具,您可以在代码上运行以重写这些导入并删除 Python 2 中其他不再有用的剩余内容。