SuperAPI AI 工具集

agh-test-conventions

测试与质量

查看项目

更新于 10-16 05:03

技能介绍

用途:这是 AGH 仓库的 Go 测试形状门禁。资料指出 AGH 各 PR 中 40% 以上的 CodeRabbit 审查问题属于测试形状违规,CLAUDE.md 规则虽正确却被忽略。该技能在 consolidate-test-suites 确认不变量、归属层与规范测试集之后生效,用于约束新建或修改测试文件的写法。

主要能力与要求:

  1. 放置确认:创建新 Go 测试文件、迁移覆盖或为清单/覆盖率加测试前,先用 consolidate-test-suites;无明确不变量或归属层则停止,不为提升覆盖率加测试。
  2. 子测试纪律:每个用例放入 t.Run("Should ...", func(t *testing.T) {...}),Should 前缀强制;表驱动为默认,每行 name 作子测试名;测试内辅助函数调用 t.Helper()。在已有函数里内联加用例属阻断性违规,须重构为独立子测试。
  3. 并行纪律:独立的子测试默认调用 t.Parallel();唯一合法例外是直接或间接使用 t.Setenv 的测试不得并行(Go 测试契约禁止该组合),审查建议需标为 INVALID 并引用文档依据。共享可变状态(文件系统、端口、包级 map)的测试以注释说明依赖后串行。
  4. 错误处理:禁止 _ = errFn(...),每个错误显式处理(json.Marshal/Unmarshal、Close、文件操作等),清理走 t.Cleanup 并自处理错误。
  5. 断言强化:仅断言状态码不足,须验证响应体、错误消息或契约证据(幂等键、请求负载、持久化状态);幂等测试第二次调用要复用同一幂等键;时间用注入时钟替代 time.Now(),ID 用注入生成器。
  6. 集成/E2E:集成测试放在 *_integration_test.go 并加 //go:build integration,与被测包同目录;make test 仅跑单元,make test-integration 追加集成标签,make test-e2e-runtime 为守护进程 Go 侧,make test-e2e-web 为 Playwright 浏览器侧;用 TestMain 做一次性开销大的初始化;用真实依赖(t.TempDir() 的真实 SQLite、acpmock 子进程),每包约 30 秒内;运行时契约变更时 E2E mock 与匹配器须同 PR 提交。
  7. 提交前校验:运行 python3 scripts/check-test-conventions.py <file_path> 快速扫描,修完再跑 go test ./<package> -count=1 -race 与 make verify;make verify 是提交门禁,被外部资产问题阻塞时不得提交,应报告并暂停;测试失败视为生产缺陷,修生产代码而非弱化断言。

限制与例外:旧文件若全程非 Should 命名,不要混用,默认重构;脚本为启发式,确有误报可用注释说明;辅助函数内间接使用 t.Setenv 时整个测试保持串行;开启 race 且涉及 cgo 时须 CGO_ENABLED=1,用仓库的 runRaceEnabledGoCommand 辅助函数,不要依赖环境变量。资料未提供该技能的收费、平台与安装命令信息。