在openpyxl中覆盖(模拟)时间戳

时间:2018-09-12 13:51:57

标签: mocking openpyxl

我创建了一个将字符串列表列表写入Excel文件的函数,现在我想为其编写一个单元测试,在其中将输出文件与参考输出文件进行比较。但是,当我保存它时,实际的时间戳记存储在文件中,因此当我比较两个文件(二进制文件)时,它们是不同的。如何模拟Excel文件创建中的时间戳,以便可以将书面Excel文件与参考文件进行比较?

此测试用例表明了我想要实现的目标。没有sleep(2),它可以工作。当我使用TextWrangle打开生成的Excel文件时,可以在docProps / core.xml中看到以下标记:<dcterms:modified xsi:type="dcterms:W3CDTF">2018-09-12T13:44:57Z</dcterms:modified>。这是我要模拟的时间戳。

def test_that_same_input_leads_to_same_file(self):
    def write_xlsx(filename: str):
        from openpyxl import Workbook
        workbook = Workbook()
        worksheet = workbook.active
        worksheet.title = 'Matrix'
        for line in content:
            worksheet.append(line)
        workbook.save(filename)
        return filename
    content = [['a', 'b', 'c', 'd'], [None, 1, 2, 3], [1, 2, 3, 4]]
    file_1 = write_xlsx('file_1.xlsx')
    sleep(2)
    file_2 = write_xlsx('file_2.xlsx')
    import filecmp
    self.assertTrue(filecmp.cmp(file_1, file_2))

编辑

如果我在补丁包装程序中执行该功能,则该功能通过。但是,当我随后不创建file_2并与之前的运行进行比较时,它仍然失败。一次运行中两个文件都需要一个时间戳,而另一次运行中则需要另一个时间戳。

from django.utils import timezone
MY_DATE = timezone.datetime(year=2017, month=1, day=2, hour=3, minute=4, second=5, tzinfo=timezone.utc)
with patch('time.time', return_value=MY_DATE.timestamp()):
    # Create Excel file here

0 个答案:

没有答案