92

所以我试图在单元测试中使用 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

它仍然无法正常工作。

4

7 回答 7

119

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

from unittest.mock import MagicMock

from mock import MagicMock

编辑:mock已包含在unittest模块中(从 Python3.3 开始),并且可以通过import unittest.mock.

于 2012-07-16T09:33:07.033 回答
21

对于 Python 2.7:

安装模拟:

pip install mock

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

from mock import patch, MagicMock
于 2017-09-20T20:10:50.367 回答
16

如果您想同时支持 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
于 2018-06-04T15:58:36.890 回答
8

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

import mock

from unittest import mock

在旧版本的 Python 上,不要更改代码中的任何内容,而是运行以下 shell 命令:

pip install mock

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


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

于 2019-11-07T21:56:39.540 回答
6

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

from unittest import mock
于 2018-04-21T20:42:18.470 回答
4

我在运行时遇到了导入问题pytest。原来我pytest的是 2.7 版本的python,而我virtualenv的是 3.6 的pythonpip install我通过执行 a from myvirtualenv然后使用pytestfrom来修复它env/bin/pytest

于 2019-03-15T15:23:56.317 回答
3

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

于 2012-07-16T09:33:10.013 回答