我正在尝试为Python程序创建一些测试。我使用的是Python版本2.7.12,因此我必须使用mock
安装sudo pip install mock
。
根据documentation和several other sites,我应该可以使用以下代码来使用补丁:
import mock # Also could use from mock import patch
import unittest
class TestCases(unittest.TestCase):
@mock.patch('MyClass.ImportedClass') # If using from mock import patch should just be @patch
def test_patches(self, mock_ImportedClass):
# Test code...
但是,上面的代码会引发以下错误:
AttributeError: 'module' object has no attribute 'patch'
在终端进行了一些实验后,似乎有一些事情不起作用。例如
>>> import mock
>>> mock.MagicMock
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'MagicMock'
>>> mock.patch
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'patch'
>>> mock.Mock
<class mock.Mock at 0x7fdff56b0600>
有趣的是,我可以使用patch
访问名为mock.Mock()
的内容,但我不知道它是否以相同的方式工作,并且在文档中找不到任何相关内容。
我对Python的经验相当有限,所以我不确定可能出现的问题。我确定安装了正确的软件包。有关如何使其正常工作的任何帮助?
答案 0 :(得分:0)
仅出于完整性考虑,我想添加答案,但是功劳归功于@ user2357112。
如果遇到此问题,请检查以确保在同一目录或python搜索路径中没有其他名为mock.py
的文件(或尝试导入的任何文件)。要确认您已加载正确的文件,可以检查mock.__file_
,这是python自动添加到导入文件的属性。如果您使用的是终端,则可以执行以下操作:
>>> import mock
>>> mock.__file__
'/usr/lib/python2.7/...'
如果文件路径与期望的路径不匹配,则应从搜索路径中删除正在导入的文件,或修改搜索路径,以便首先找到所需文件。如果这些都不是选项,则需要更改要导入的文件的名称(如果是您定义的文件,而不是模拟库)。