用途:指导 TiDB 仓库中的测试放置位置与编写方式,包括基础结构、命名与 testdata 使用;适用于咨询测试位置、编写约定等场景。
主要能力与规则:
- 先用 rg --files -g '_test.go' 和 rg --files -g '.json' 定位目标包与最近覆盖,优先复用最近的 suite、fixture 与 testdata。
- 目录测试数与 BUILD.bazel 的 shard_count 对齐,实践中每目录不超过 50 个测试(基准测试不计入)。移动测试或基准时更新 BUILD.bazel 及 Makefile bench-daily 等包装。
- 同一行为区域优先表驱动测试,复用已有 helper 与 fixture;每个测试优先一个 store 加一个 tk,变量名用 tk(不用 testKit)。
- 后续缺陷修复优先追加到语义接近的已有 suite;已是顺序的回归 suite 保持顺序块,除非语义需要隔离或并行才引入 t.Run。
- 断言优先使用精确断言 .Check(testkit.Rows(...)),仅在输出本身不稳定时用 MultiCheckContain 并注明原因。
- 测试命名基于行为,不得只用 issue id 命名;合并 issue 回归测试时可在 SQL 注释保留 issue id 便于追溯。
包相关说明:扩展 suite 时沿用同目录已有 testdata 模式(_in.json、_out.json、*_xut.json);仅在 Go 测试明确支持 -record 且需重生成输出时使用 -record -tags=intest,deadlock;tests/integrationtest 使用 docs/agents/testing-flow.md 中的录制命令。planner/core 优化器普通断言默认 EXPLAIN format = 'plan_tree',stats/analyze 相关、plan cache、hint 等特殊格式 suite 保持原有格式。Bazel 下读源文件需用 go/runfiles 并在所属 BUILD.bazel 中用 exports_files() 导出。
限制与依赖:资料未提供安装命令、收费与平台信息;部分流程依赖仓库内 references/、docs/agents/testing-flow.md 与 .agents/skills/tidb-bazel-prepare-gate 等文件,缺失 case map 时不阻塞。