我正在尝试模拟文件打开,所有的例子都表明我需要
@patch('open', create=True)
但我一直收到
Need a valid target to patch. You supplied: 'open'
我知道补丁需要open
的全点路径,但我不知道它是什么。事实上,我甚至不确定这是问题所在。
您需要包含一个模块名称;如果在脚本中进行测试,则模块的名称为__main__
:
@patch('__main__.open')
否则,请使用包含正在测试的代码的模块的名称:
@patch('module_under_test.open')
使得任何使用内置CCD_ 3的代码都将找到修补的全局代码。
请注意,mock
模块附带了一个mock_open()
实用程序,它可以让您使用文件数据构建一个合适的open()
调用:
@patch('__main__.open', mock_open(read_data='foonbarnbazn'))
在Python 3中,您应该使用装饰器
@mock.patch("builtins.open", create=True)
或作为上下文管理器
with mock.patch('builtins.open', mock.mock_open(read_data=some_data)) as m:
...