补全:--format 接到写出函数上
补全 run:按 a.format 选择写 CSV 还是 JSON(写进内存)。输出两种格式各写出多少行。
数据工具的用例分几类
给这个数据工具写测试,最少要覆盖的三类输入是【0】。
为什么不直接 assert
本节用 CHECK(cond) 记录跑了几条、过了几条,而不是一句句 assert。这样做的好处是【0】。
三条用例的结果
下面对 clean 跑三类用例。运行程序,看 跑了几条 / 过了几条: import csv, io ran, passed = 0, 0 def CHECK(cond): global ran, passed ran +
挂掉的那一条
同一套 CHECK,这次用例里有一条的期望值写错了。运行程序: ran, passed, failed = 0, 0, [] def CHECK(name, cond): global ran, passed ran +=
补全:写一条正常用例
补全用例:对两行正常数据跑 clean,断言好行数是 2、坏行为空。输出 跑了/过了。
补全:空文件和坏数据各一条
补全两条用例:只有表头时好行坏行都为空;一行 five 时坏行号是 [2]。输出 跑了/过了。
补全:写出去再读回来不能变
补全「往返」用例:把 table 写成 CSV 再用 DictReader 读回,断言行数一样、第一家店的总额还是 44.0(注意读回来是字符串)。输出 跑了/过了。
补全:让报告说出挂了哪条
补全 CHECK:记名字,挂了就把名字收进 failed;再补全最后那句汇总。输出「跑了/过了/挂的名字」。
流水线的顺序为什么不能乱
这个工具的主流程是「读 → 清洗 → 转换 → 写」。把清洗挪到转换后面,会出的问题是【0】。