所以我试图使用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
它还没有用。
答案 0 :(得分:84)
unittest
是一个内置模块; mock
是一个外部库(无论如何都是3.3之前的测试版)。通过mock
安装pip install
后,您不能使用
from unittest.mock import MagicMock
但
from mock import MagicMock
编辑:mock
已包含在unittest
模块中(自Python3.3起),可由import unittest.mock
导入。
答案 1 :(得分:12)
对于Python 2.7:
安装模拟:
pip install mock
然后在测试代码中,使用此导入:
from mock import patch, MagicMock
答案 2 :(得分:9)
如果您想同时支持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
答案 3 :(得分:3)
对于您的版本,我建议您转到http://hg.python.org/cpython/file/default/Lib/unittest/mock.py并使用此来源。
答案 4 :(得分:2)
出于某种原因,import unittest.mock
对我不起作用,我必须这样做
from unittest import mock
答案 5 :(得分:1)
更改
root.mainloop
到
import mock
发生这种情况是因为from unittest import mock
is a builtin module从Python 3.3开始,但是有a backport on PyPI用于较旧的版本,您可以将其安装为unittest.mock
,然后再导入为{{1 }}。
如果您使用的是Python 3.3或更高版本,则无需进行任何pip安装,只需将其导入为pip install mock
。
答案 6 :(得分:0)
运行pytest
时遇到导入问题。原来,我的pytest
是python
的2.7版本,而我的virtualenv
是3.6 python
的版本。我通过在pip install
中进行virtualenv
的修复,然后使用了pytest
中的env/bin/pytest
。