请告诉我如何测试写入 csv 文件的功能而不写入文件,而是在下一行已经生成时放置一个模拟对象?
from csv import DictWriter
def write_to_csv(filename, address, opcode) -> None:
with open(filename, 'w', newline='') as csv_file:
writer = DictWriter(csv_file, fieldnames=(
'address', 'opcode'))
writer.writeheader()
writer.writerow({'address': address,
'opcode': opcode})
这是我想要得到的伪代码:
def test_write_to_csv():
class CSVWriter:
def write(row):
self.row = row
csv_writer = CSVWriter()
with monkeypatch(DictWriter, csv_writer):
write_to_csv('opcodes.csv', 0xDA, 5)
assert '0xDA,5' == csv_writer.row
在这段伪代码中我:
- 创建了一个补丁对象来累积生成的字符串以写入 CSV 文件
DictWriter我通过传递我的补丁对象来修补标准对象,该对象会累积行- 然后我调用被测试的函数
write_to_csv - 执行被测函数后,我检查其运行结果
我的示例专门缩小为此类原始代码,以便更容易解释我想要实现的目标。我需要编辑别人项目的代码;我没有机会在不降低自动测试速度的情况下测试记录大量值的 CSV 文件。因此,我真的想避免实际的 I/O 操作,并通过将生成的 csv 字符串累积在内存中来检查它们。
我不明白如何将伪代码测试转化为工作代码。如何编写猴子路径代码来修补标准模块以进行测试csv?
您可以通过以下方式
open检查其工作结果: