ImportError:没有名为模拟的模块


81

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

它仍然无法正常工作。


1
该模块在版本3.3中可用,您的版本是什么
Avasal 2012年

1
我的版本是2.7。还有其他选择吗?
理查德·诺普

1
根据Google的说法,这也应该适用于2.7。
理查德·诺普

Answers:


110

unittest是一个内置模块;mock是一个外部库(无论是3.3版之前的Beta版)。安装完成后mock通过pip install,在导入未使用

from unittest.mock import MagicMock

from mock import MagicMock

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


在Python 3.3+上,您需要执行此答案所建议的相反操作:from unittest.mock import MagicMock
Boris

18

对于Python 2.7:

安装模拟:

pip install mock

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

from mock import patch, MagicMock

12

如果要同时支持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

由于某种原因,import unittest.mock对我没有用,我不得不

from unittest import mock

4

我在运行时遇到导入方面的问题pytest。原来我pytest是2.7版python,而我virtualenv是3.6版python。我通过执行pip installfrom来解决它virtualenv,然后使用pytestfrom来解决env/bin/pytest



3

更改

import mock

from unittest import mock

发生这种情况是因为它unittest.mock 是一个从Python 3.3开始的内置模块,但是PyPI上一个较早版本的反向端口,您可以将其安装为pip install mock,然后导入为import mock

如果您使用的是Python 3.3或更高版本,则无需pip安装任何内容,只需将其导入为即可from unittest import mock

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.