Привет, у меня была похожая проблема, и я рвал на себе волосы, перебирая разные насмешливые библиотеки.Я наконец нашел решение, которым я доволен, и, может быть, оно может вам помочь?В конце я пошел с библиотекой Mocker http://labix.org/mocker и вот код для mocking open:
from mocker import Mocker
from StringIO import StringIO
import __builtin__
mocker = Mocker()
sourceFile = 'myTestFile.txt'
__builtin__.open = mocker.mock()
__builtin__.open(sourceFile)
mocker.result(StringIO('this,is,a,test,file'))
<the rest of your test setup goes here>
mocker.replay()
ParseCsvFile(sourceFile)
mocker.restore()
mocker.verify()
Кстати, причина, по которой я пошел с Mocker, заключается в том, что я тестировал функцию, которая использовала openчтобы прочитать файл, а затем снова использовать open, чтобы перезаписать тот же файл новыми данными.То, что мне нужно было сделать, это протестировать случай, когда первоначальный файл не существовал, поэтому создайте макет, который выдает IOError в первый раз, а затем работает во второй раз.Настройка для которой выглядела так:
from mocker import Mocker
import __builtin__
mocker = Mocker()
mockFileObject = mocker.mock()
__builtin__.open = mocker.mock()
__builtin__.open('previousState.pkl', 'r')
mocker.throw(IOError('Boom'))
__builtin__.open('previousState.pkl','w')
mocker.result(mockFileObject)
<rest of test setup >
mocker.replay()
<test>
mocker.restore() #required to restore the open method
mocker.verify()
Надеюсь, это поможет!