>>> with patch('__main__.open', mock_open(read_data='bibble')) as m: ... with open('foo') as h: ... result = h.read() ... >>> m.assert_called_once_with('foo') >>> assert result == 'bibble'
Но, что если файл считывается строка за строкой, циклом for? Не помогает ни StringIO, ни даже если параметром read_data передать тупо список строк.
from mock import patch, mock_open from StringIO import StringIO filedata = """This is line1 and this is line2 and here is line3 """ filedata_for_line = StringIO(filedata) with patch('__main__.open', mock_open(read_data=filedata_for_line)) as m: with open('foo') as f: for line in f: print line with patch('__main__.open', mock_open(read_data=filedata.split('\n'))) as m: with open('foo') as f: for line in f: print line
То есть, ни один из примеров выше не работает. Просто ничего не выводит. Что делать, как быть, кто виноват?