模拟文件在python中打开

时间:2016-07-19 09:16:14

标签: python unit-testing mocking magicmock

我正在尝试模拟文件打开,所有示例都显示我需要

@patch('open', create=True) 

但我一直在

Need a valid target to patch. You supplied: 'open'

我知道补丁需要 open 的完整虚线路径,但我不知道它是什么。事实上,我甚至不确定这是不是问题。

2 个答案:

答案 0 :(得分:12)

您需要包含模块名称;如果您在脚本中进行测试,则模块的名称为__main__

@patch('__main__.open')

否则使用包含您正在测试的代码的模块的名称:

@patch('module_under_test.open')

因此,使用open()内置代码的任何代码都会找到修补后的全局代码。

请注意,mock模块附带mock_open() utility,可让您使用文件数据构建合适的open()调用:

@patch('__main__.open', mock_open(read_data='foo\nbar\nbaz\n'))

答案 1 :(得分:7)

在Python 3中你应该使用:

@mock.patch("builtins.open", create=True)