如何编写一个从zip文件创建InMemoryUploadedFile的python测试?

时间:2017-08-26 21:37:08

标签: python django unit-testing

我的系统中有以下Django代码:

zip_file = zipfile.ZipFile(file, 'r')
for filename in zip_file.namelist():
    try:
        file_read = zip_file.read(filename)
        print(filename)

我试图通过从python TestCase传入一个zip文件来测试这段代码。当我在Web界面中使用此代码时,我注意到zip文件是InMemoryUploadedFile类型。所以我试图用我的TestCase模仿这个功能,但似乎不能在我的测试中用zip文件创建一个InMemoryUploadedFile()。

我试过这个:

file_name = 'file.zip'
in_memory_uploaded_file = InMemoryUploadedFile(file_name, None, file_name, 'application/zip', 0, None, None)

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

根据source,应InMemoryUploadedFile调用InMemoryUploadedFile(file, field_name, name, content_type, size, charset, [content_type_extra])

所以,你应该传递所有这些参数:

with file as open('file.zip', 'r'):
    InMemoryUploadedFile(file, relevant_field,'arquivo',
                         'application/zip', file_size, 'utf8')

对于文件大小,您可以使用固定数字进行测试,或者如果需要,可以使用https://stackoverflow.com/a/19079887/3930971中的技术

f.seek(0, os.SEEK_END)
size = f.tell()
f.seek(0, os.SEEK_SET)