Я пытаюсь использовать библиотеку Python mock для моделирования нескольких методов для zipfile-модуля.Mocking zipfile in python
Пример Источник, который я хочу, чтобы тест:
def zipStuff(listOfPathToFiles):
with ZipFile(fName, 'w') as archive:
for each in listOfPathToFiles:
archive.write(each, strippedfName)
return archive
«архив» выше будет игнорироваться для нормального исполнения, но будет список файлов во время тестов.
Пример UnitTest Код:
emptyList=[]
def mockWrite(fName):
emptyList.append(fName)
return
mockZip.__enter__ = Mock(return_value=emptyList)
mockZip.__exit__ = Mock(return_value=True)
Теперь я хочу, чтобы дразнить archive.write так, что вместо фактического вызова записи, он заменяется функцией mockWrite таким образом я могу получить список всех файлов, которые должны были для молнии.
Я пробовал:
mockZip.write = Mock(side_effect=mockWrite)
, но это не называют. Отладка показывает, что функция вызывает mockZip. введите() .write. Если я попробую:
mockZip.__enter__().write = Mock(side_effect=mockWrite)
Python выдает ошибку, в которой «список» не имеет атрибута write (что правильно). Я новичок в Mock и Python и очень ценю любые указатели. Предложения?
'mockZip .__ enter__ = (return_value = emptyList)' invalid syntax – LittleQ
Я написал код здесь и снова пропустил Mock-вызовы. Правильный синтаксис - Mock (return_value = emptyList). Изменен исходный вопрос. Спасибо :) – user2148703