提问人:Richard Knop 提问时间:7/16/2012 最后编辑:firelynxRichard Knop 更新时间:9/19/2023 访问量:136037
ImportError:没有名为 mock 的模块
ImportError: No module named mock
问:
因此,我正在尝试使用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
它仍然不起作用。
答:
unittest
是一个内置模块; 是一个外部库(无论如何,3.3 之前的测试版)。安装 via 后,您不使用mock
mock
pip install
from unittest.mock import MagicMock
但
from mock import MagicMock
编辑:已包含在模块中(从 Python3.3 开始),可以通过 导入。mock
unittest
import unittest.mock
评论
from unittest.mock import MagicMock
对于您的版本,我建议您去 http://hg.python.org/cpython/file/default/Lib/unittest/mock.py 并利用此资源来发挥您的优势。
对于 Python 2.7:
安装 mock:
pip install mock
然后在测试代码中,使用以下导入:
from mock import patch, MagicMock
出于某种原因,对我不起作用,我不得不这样做import unittest.mock
from unittest import mock
如果要同时支持 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
我在运行时遇到导入问题。原来是我的 2.7 版本,而我的是 3.6 。我通过执行 from my 然后使用 from .pytest
pytest
python
virtualenv
python
pip install
virtualenv
pytest
env/bin/pytest
如果您使用的是 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 中其他不再有用的剩余内容。
评论