c1m*_*ore 5 python unit-testing python-2.7
我正在尝试为Python程序创建一些测试.我使用的是Python 2.7.12版,所以我不得不安装mock使用sudo pip install mock.
根据文档和其他几个 站点,我应该能够使用以下代码来使用补丁:
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...
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码会引发以下错误:
AttributeError: 'module' object has no attribute 'patch'
Run Code Online (Sandbox Code Playgroud)
在终端进行了一些实验后,似乎有一些事情不起作用.例如
>>> 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>
Run Code Online (Sandbox Code Playgroud)
有趣的是,我可以访问一些名为patchusing的东西mock.Mock(),但我不知道它是否以相同的方式工作,并且在文档中找不到任何相关内容.
我对Python的经验相当有限,所以我不确定可能出现的问题.我很确定安装了正确的软件包.有关如何使其工作的任何帮助?
只是为了完整起见,我想添加答案,但功劳归于@user2357112。
如果您遇到此问题,请检查以确保同一目录或 python 的搜索路径中没有另一个名为mock.py(或您尝试导入的任何文件)的文件。要确认您已加载正确的文件,您可以检查mock.__file_,这是 python 自动添加到导入文件中的属性。如果您使用终端,您可以执行以下操作:
>>> import mock
>>> mock.__file__
'/usr/lib/python2.7/...'
Run Code Online (Sandbox Code Playgroud)
如果文件路径与您期望的不匹配,您应该从搜索路径中删除正在导入的文件或修改搜索路径,以便首先找到您想要的文件。如果这两个选项都不是,您需要更改要导入的文件的名称(如果它是您定义的而不是像模拟这样的库)。
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |