【发布时间】:2012-01-05 17:08:43
【问题描述】:
我正在使用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()
我假设的输出是<mock.Mock object at 0x8f4aaec> 而不是'test'。我在构建这个模拟时做错了什么?
编辑:
看起来像这样:
with open('x') as f:
f.read()
还有这个:
f = open('x')
f.read()
是不同的对象。使用模拟作为上下文管理器使它返回一个新的Mock,而直接调用它返回我在mock_open.return_value 中定义的任何内容。有什么想法吗?
【问题讨论】:
标签: python tdd mocking python-mock