SuperAPI AI 工具集

go-testing

测试与质量

查看项目

更新于 10-15 20:30

技能介绍

用途:在编写、审查或改进 Go 测试代码时提供规范与参考,覆盖表驱动测试、子测试、并行测试、测试助手、测试替身和断言方式。

主要能力与规范:

  • 失败信息必须无需阅读测试源码即可诊断,需包含函数名、输入、got 与 want,格式如 Add(2, 3) = %d, want %d,且先打印 got 后 want。
  • 不使用断言库,复杂比较用 cmp.Diff,例如 if diff := cmp.Diff(want, got); diff != "" { t.Errorf("GetPost() mismatch (-want +got):\n%s", diff) };protobuf 可加 protocmp.Transform(),diff 信息须带方向键 -want +got,避免比较 JSON/序列化输出,改为语义比较。
  • 默认用 t.Error 报告全部失败;仅在继续无意义时用 t.Fatal(如初始化失败或下一步断言依赖前一步成功),且不得在测试 goroutine 之外调用 t.Fatal/t.FailNow。
  • 表驱动测试:多用例共享相同逻辑时使用,单一 shouldErr bool 可接受;用例需要复杂初始化、条件 mock 或多分支时改用独立测试函数。用例跨多行或相邻字段同类型时使用字段名,失败信息须含输入,不得用行索引标识。
  • 测试助手:首行调用 t.Helper(),用 t.Cleanup() 做清理而非 defer。
  • 测试错误语义而非错误字符串,优先用 errors.Is,简单存在性判断可比较布尔。

资源路由:scripts/gen-table-test.sh 生成表驱动测试脚手架;assets/table-test-template.go 为可复制模板;references/TABLE-DRIVEN-TESTS.md、TEST-HELPERS.md、TEST-ORGANIZATION.md、VALIDATION-APIS.md、INTEGRATION.md 分别覆盖模式选择、助手与替身、包组织与黑盒测试、校验 API 选择、外部服务/HTTP/数据库等集成测试。

使用方式与限制:生成或修改测试后运行 go test -run TestXxx -v 验证编译与通过。示例可能使用 github.com/google/go-cmp。与 go-error-handling、go-interfaces、go-naming、go-linting 技能相关。收费、平台等信息暂未提供。