ImportError:没有名为mock的模块

Ric*_*nop 71 python python-import importerror python-2.7

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

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

但我得到:

ImportError: No module named mock
Run Code Online (Sandbox Code Playgroud)

我试过了:

pip install mock
Run Code Online (Sandbox Code Playgroud)

它仍然无法正常工作.

DSM*_*DSM 93

unittest是一个内置模块; mock是一个外部库(无论如何都是3.3之前的beta).安装mockvia后pip install,不使用导入它

from unittest.mock import MagicMock
Run Code Online (Sandbox Code Playgroud)

但

from mock import MagicMock
Run Code Online (Sandbox Code Playgroud)

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


Dre*_*rew 15

对于Python 2.7:

安装模拟:

pip install mock
Run Code Online (Sandbox Code Playgroud)

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

from mock import patch, MagicMock
Run Code Online (Sandbox Code Playgroud)


Mos*_*teM 10

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

import sys
if sys.version_info >= (3, 3):
    from unittest.mock import MagicMock
else:
    from mock import MagicMock
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想导入 sys

try:
    from unittest.mock import MagicMock
except ImportError:
    from mock import MagicMock
Run Code Online (Sandbox Code Playgroud)


fri*_*mle 6

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

from unittest import mock
Run Code Online (Sandbox Code Playgroud)


Bor*_*ris 6

改变

import mock
Run Code Online (Sandbox Code Playgroud)

到

from unittest import mock
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为它unittest.mock 是一个从 Python 3.3 开始的内置模块,但是PyPI 上有一个用于旧版本的向后移植,您可以将其安装pip install mock为import mock.

如果您使用的是 Python 3.3 或更高版本,则不需要 pip install 任何东西,只需将其导入为from unittest import mock.


jos*_*eph 5

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