Bri*_*cks 6 python tdd mocking python-mock
我正在使用python-mock来模拟文件打开调用.我希望能够以这种方式传递伪数据,因此我可以验证read()
是否正在调用以及使用测试数据而无需在测试中访问文件系统.
这是我到目前为止所得到的:
file_mock = MagicMock(spec=file)
file_mock.read.return_value = 'test'
with patch('__builtin__.open', create=True) as mock_open:
mock_open.return_value = file_mock
with open('x') as f:
print f.read()
Run Code Online (Sandbox Code Playgroud)
正如我所假设<mock.Mock object at 0x8f4aaec>
的'test'
那样输出.我在构建这个模拟时做错了什么?
编辑:
看起来像这样:
with open('x') as f:
f.read()
Run Code Online (Sandbox Code Playgroud)
还有这个:
f = open('x')
f.read()
Run Code Online (Sandbox Code Playgroud)
是不同的对象.使用mock作为上下文管理器使它返回一个新的Mock
,而直接调用它返回我已定义的内容mock_open.return_value
.有任何想法吗?
Mic*_*kel 11
对于StringIO
已经实现文件接口的对象来说,这听起来像是一个很好的用例.也许你可以做一个file_mock = MagicMock(spec=file, wraps=StringIO('test'))
.或者你可以让你的函数接受一个类似文件的对象并传递它StringIO
而不是真正的文件,避免需要丑陋的猴子修补.
你看过模拟文档吗?
tbc*_*bc0 10
在Python 3中,模式很简单:
>>> import unittest.mock as um
>>> with um.patch('builtins.open', um.mock_open(read_data='test')):
... with open('/dev/null') as f:
... print(f.read())
...
test
>>>
Run Code Online (Sandbox Code Playgroud)
(是的,你甚至可以模拟/ dev/null来返回文件内容.)
归档时间: |
|
查看次数: |
12956 次 |
最近记录: |