在python中模拟zipfile

2024-09-30 16:41:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python模拟库来模拟zipfile模块的一些方法。在

我要测试的示例源:

def zipStuff(listOfPathToFiles):
    with ZipFile(fName, 'w') as archive:
        for each in listOfPathToFiles:
             archive.write(each, strippedfName)
    return archive

对于正常执行,上面的“归档”将被忽略,但将是测试期间的文件列表。在

单元测试代码示例:

^{pr2}$

现在,我想嘲笑存档.写入因此,它不是实际的write调用,而是被mockWrite函数替换,这样我就可以得到所有应该压缩的文件的列表。在

我试过:

mockZip.write = Mock(side_effect=mockWrite)

但没人叫这个。调试显示函数正在调用mockZip。enter().write。如果我尝试:

mockZip.__enter__().write = Mock(side_effect=mockWrite)

Python发出“list”没有属性write的错误(这是正确的)。我是Mock和Python的新手,如果有任何提示,我将非常感谢。建议?在


Tags: 文件函数示例列表mocksidewriteeach
2条回答

与其让mockZip.__enter__返回空列表,不如让它返回如下对象:

class MockZipFile:
    def __init__(self):
        self.files = []
    def __iter__(self):
        return iter(self.files)
    def write(self, fname):
        self.files.append(fname)

您可以根据需要添加方法和实现,以满足您的模拟需求。在

我相信您的问题是函数是使用contextlib(https://docs.python.org/2/library/contextlib.html)调用enter而不是entry。更改此模拟应该可以解决您的问题。在

相关问题 更多 >