【发布时间】:2021-01-24 19:19:34
【问题描述】:
我有一个读取 excel 文件并根据其内容生成报告的函数。如何在 pytest 中编写测试以检查文件是否生成并按预期创建报告?
import openpyxl
def create_report(file_path):
#open an existing report
xfile = openpyxl.load_workbook(file_path)
sheet = xfile.get_sheet_by_name('Sheet1')
sheet['A1'] = 'hello world'
sheet['A3'] = 22
sheet.cell(row=2, column=2).value = 2
#Write data to excel sheet
#save as new report
xfile.save('test_report.xlsx')
在测试涉及创建新文件以生成报告的功能时,最佳做法是什么? 这个功能可以通过Mocking文件路径来测试吗?
【问题讨论】:
-
您可以向函数添加
report_path参数,并在您的测试中创建一个临时目录,将路径传递到该目录并在测试后将其删除。这也很有帮助,因为报告文件名将不再是硬编码的。 -
@warownia1 我们可以在不使用模拟功能打开真实文件的情况下读取和写入excel文件吗?
-
您应该能够从流而不是文件名加载和保存。将您的函数签名更改为
create_report(input_file, output_file='test_report.xlsx')。您的程序将能够像以前一样使用它,只提供输入文件路径,但测试将通过两个内存缓冲区。 -
@warownia1 是否可以模拟作为 excel 文件的 input_file 而不是加载原始文件?
标签: python python-3.x pytest python-unittest pytest-mock