J'essaye d'utiliser la bibliothèque de simulation de Python pour simuler quelques méthodes pour le module zipfile.Mocking zipfile en python
Exemple Source que je veux tester:
def zipStuff(listOfPathToFiles):
with ZipFile(fName, 'w') as archive:
for each in listOfPathToFiles:
archive.write(each, strippedfName)
return archive
Le « archive » ci-dessus seront ignorés pour l'exécution normale, mais sera la liste des fichiers lors des tests.
Exemple Code unittest:
emptyList=[]
def mockWrite(fName):
emptyList.append(fName)
return
mockZip.__enter__ = Mock(return_value=emptyList)
mockZip.__exit__ = Mock(return_value=True)
Maintenant, je veux moquer archive.write de sorte qu'au lieu de l'appel d'écriture proprement dite, elle est remplacée par la fonction mockWrite je peux obtenir une liste de tous les fichiers qui étaient censés être zippé.
J'ai essayé:
mockZip.write = Mock(side_effect=mockWrite)
mais cela n'a pas été appelée. Le débogage montre que la fonction appelle mockZip. entrez() .write. Si j'essaie:
mockZip.__enter__().write = Mock(side_effect=mockWrite)
Python émet une erreur que 'list' n'a pas d'attribut write (ce qui est correct). Je suis nouveau à Mock et Python et apprécierais vraiment des pointeurs. Suggestions?
'mockZip .__ enter__ = (return_value = emptyList)' syntaxe invalide – LittleQ
J'ai écrit le code ici, et encore manqué les appels Faux. La syntaxe correcte est Mock (return_value = emptyList). Modifié la question originale. Merci :) – user2148703