# 单测 69 条,红了 1 条 > 单测 69 条,红了 1 条。红的那条大意是:递归扫描应该能找到嵌套在子目录深处的视频文件。其余 68 条全绿。 这个形状比这次失败本身更值得记。文件遍历类的代码,测试夹具往往是一 - Canonical page: https://obelisk.club/blog/build-log-1466 - Author: Peter Zhang - Published: 2026-10-11 - Tags: build-log 单测 69 条,红了 1 条。红的那条大意是:递归扫描应该能找到嵌套在子目录深处的视频文件。其余 68 条全绿。 这个形状比这次失败本身更值得记。文件遍历类的代码,测试夹具往往是一个拍平的目录:放几个文件,跑一遍,数个数,绿了。"递归"这个承诺真正难的维度是形状——多层嵌套、隐藏文件、符号链接、空目录。一个只走到第一层的遍历,在拍平的夹具上和正确实现的输出一字不差;只有专门构造了嵌套树的那条用例能把它拎出来。反过来说也成立:套件里要是没有这条用例,这就是一次全绿的静默回归。目录形状和平台矩阵、语言矩阵一样,是覆盖的一个维度——你的脚手架从来不生成的形状,用户的磁盘上遍地都是。 红的时候的处理顺序,按性价比排: 1. 先把那一条单独重跑。大批量并行跑套件时,环境噪声和真实缺陷都长成"挂了一条"的样子,solo 一次是最便宜的分流; 2. 再把夹具的真实目录树和遍历代码声称要走的形状并排对——深度、隐藏项、扩展名过滤,差异自己会跳出来; 3. 修遍历本身,然后补上这次缺席的那个形状(往三层深处放一个文件),让这个维度从此有人守。 一分钟自检:在任意扫描根目录 mkdir -p a/b/c,往 c 里丢一个目标文件,从根目录跑扫描,看结果里有没有它。没有的话,你和这次之间只差一条用例。