简体   繁体   中英

mock file open in python

I'm trying to mock file open, and all of the examples show that I need to

@patch('open', create=True) 

but I keep getting

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

I know patch needs the full dotted path of open , but I have no idea what it is. As a matter of fact, I'm not even sure that's the problem.

You need to include a module name; if you are testing in a script, the name of the module is __main__ :

@patch('__main__.open')

otherwise use the name of the module that contains the code you are testing:

@patch('module_under_test.open')

so that any code that uses the open() built-in will find the patched global instead.

Note that the mock module comes with a mock_open() utility that'll let you build a suitable open() call with file data:

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

在Python 3中你应该使用:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM