Files
junhong_cmp_fiber/.planning/codebase/TESTING.md

8.1 KiB
Raw Blame History

Testing Patterns

Analysis Date: 2026-03-27

Test Framework

Runner:

  • 当前仓库未检测到有效的 Go 自动化测试文件:glob("**/*_test.go") 返回空,glob("tests/**") 返回空。
  • 因此,仓库当前状态下不存在可执行的项目内单元测试、集成测试或 E2E 测试代码。

Assertion Library:

  • 未检测到;因为当前仓库没有 *_test.go 文件。

Configured / Documented commands:

go test ./...                 # `README.md` 文档命令;当前仓库没有测试文件
go test -cover ./...          # `README.md` 文档命令;覆盖率描述与仓库现状不符
go test -v ./...              # `Makefile` 的 `test` 目标与 `README.md` 一致
go test ./pkg/...             # `README.md` 文档命令;当前没有对应测试文件
go test ./tests/integration/... # `README.md` 文档命令;当前仓库不存在 `tests/` 目录内容
go test -v ./internal/middleware -run TestKeyAuth # `README.md` 文档命令;当前未检测到对应测试

Policy Reality

Current project rule (authoritative):

  • AGENTS.md 明确规定:本项目不使用任何形式的自动化测试代码。
  • AGENTS.md 明确禁止单元测试、集成测试、验收测试、流程测试、E2E 测试,以及创建 *_test.go 文件;唯一例外是用户明确要求“请写测试”。

Repository reality:

  • 当前仓库与该规则一致:未发现任何 *_test.go 文件,也未发现 tests/ 目录内容。

Stale documentation conflicts:

  • README.md 仍包含完整“测试”章节,列出 go test ./...、覆盖率、集成测试、tests/integration/、以及 docs/testing/test-connection-guide.md 的说明。
  • README.md 的项目结构段仍展示 tests/integration/auth_test.gotests/integration/ratelimit_test.go
  • README.md 的 “Speckit / 宪章” 段仍写有 “70%+ 测试覆盖率,核心业务 90%+”。
  • 这些内容与 AGENTS.md 的现行禁令、以及仓库中真实文件状态冲突。后续执行应以 AGENTS.md + 实际文件现状为准。

Verification Approach Actually Used

Primary approach:

  • 人工验证 + 脚本检查 + 文档生成检查 + 生产日志/监控。

Evidence from policy:

  • AGENTS.md 将替代方案明确写为:
    • 使用 PostgreSQL MCP 工具手动验证数据
    • 使用 Postman/curl 手动测试 API
    • 依赖生产环境日志和监控发现问题

Repository scripts that support this model:

  • scripts/check-service-errors.sh:静态扫描 Service 层错误处理规则。
  • scripts/check-comment-paths.sh:静态扫描 Handler 注释中的 API 路径是否过时。
  • scripts/check-all.sh:聚合上述脚本。
  • scripts/verify_migration/main.go:直接连接数据库查询表和字段,验证迁移结果;这是一种手工校验辅助程序,不是自动测试框架。
  • cmd/gendocs/main.go / make docs:通过重新生成 OpenAPI 文档来验证路由注册和文档接线是否完整。

Test File Organization

Location:

  • 当前无自动化测试文件。

Naming:

  • 按 Go 常规应为 *_test.go,但本项目现行规则禁止新增,除非用户明确要求。

Structure:

自动化测试目录:未检测到
README 中声明的 `tests/integration/`:当前不存在实际文件

Manual Validation Patterns

API / behavior validation:

  • 使用 Postman、curl 或 Swagger/OpenAPI 文档进行接口人工验证,依据见 AGENTS.mddocs/api-documentation-guide.md
  • 生成 OpenAPI 文档后检查路径是否出现:go run cmd/gendocs/main.go,再检查 docs/admin-openapi.yaml,依据见 docs/api-documentation-guide.md

Database validation:

  • 涉及数据正确性时,使用 PostgreSQL MCP 工具做手动查询验证,依据见 AGENTS.mddb-validation 说明。
  • 涉及迁移结果时,可运行 go run scripts/verify_migration/main.go 检查表与字段;该脚本读取真实数据库 schema不产出测试报告。

Convention validation:

  • 改动 Service 层错误处理后运行 bash scripts/check-service-errors.sh
  • 改动 Handler 注释或路由后运行 bash scripts/check-comment-paths.sh
  • 需要一次性检查时运行 bash scripts/check-all.sh

Documentation / OpenAPI validation:

  • 新增 Handler 后必须同步更新 cmd/api/docs.gocmd/gendocs/main.go,然后重新生成文档并检查目标路径,依据见 docs/api-documentation-guide.md

Mocking

Framework:

  • Not applicable当前没有自动化测试代码。

Patterns:

未检测到 mock 框架、测试替身、fixture helper 或 testutil 包的实际使用。

What to Mock:

  • 当前仓库没有现行自动化测试实践可供复用。

What NOT to Mock:

  • 当前仓库没有现行自动化测试实践可供复用。

Fixtures and Factories

Test Data:

未检测到 fixture/factory 测试数据目录或 `_test.go` 中的构造模式。

Reality check:

  • README.md 仍引用 docs/testing/test-connection-guide.mdtestutils.NewTestTransaction(...) 示例,但当前仓库没有对应测试文件作为实际落点。

Coverage

Requirements:

  • 当前现行项目规则不要求覆盖率,且原则上禁止自动化测试,依据见 AGENTS.md

Conflict to document clearly:

  • README.md 和其中引用的 Speckit 宪章仍声称需要覆盖率目标;这与 AGENTS.md 的测试禁令冲突,且与当前“零测试文件”现状不符。

View Coverage:

go test -cover ./...    # 仅为 README 中遗留命令,不代表现行流程

Test Types

Unit Tests:

  • 当前未使用。

Integration Tests:

  • 当前未使用。
  • README.md 里提到的 tests/integration/ 是过期描述,不是当前仓库事实。

E2E Tests:

  • 当前未使用。

CI Reality

Actual workflow present:

  • .gitea/workflows/deploy.yaml 只有检出、Docker 构建、推送镜像、部署到测试环境的步骤。

What is not in CI:

  • 未发现 go test
  • 未发现 bash scripts/check-all.sh
  • 未发现 bash scripts/check-service-errors.sh
  • 未发现 bash scripts/check-comment-paths.sh
  • 未发现独立的质量门或覆盖率上传步骤。

Conflict to document clearly:

  • README.md 写着“这些检查会在 CI/CD 流程中自动执行”,但 .gitea/workflows/deploy.yaml 中没有相应步骤。当前 CI 现实是“构建/部署优先,无显式质量校验门”。

Common Verification Commands

bash scripts/check-service-errors.sh   # 校验 Service 错误处理规则
bash scripts/check-comment-paths.sh    # 校验 Handler 注释路径是否过时
bash scripts/check-all.sh              # 运行当前已存在的全部静态脚本检查
go run cmd/gendocs/main.go             # 重新生成 OpenAPI 文档,验证路由接线
make docs                              # 等价于生成 OpenAPI 文档
go run scripts/verify_migration/main.go # 人工验证数据库迁移结果

Current Gaps and Caveats

  • Makefile 仍保留 test: 目标并执行 go test -v ./...,这属于历史遗留入口,不应被误解为现行团队要求。
  • README.md 的测试章节、目录结构和覆盖率目标明显滞后于当前 AGENTS.md 规则。
  • scripts/check-service-errors.sh 虽然存在,但当前仓库 internal/service/polling/alert_service.go 仍有 fmt.Errorf(...) 违规点,说明现有脚本检查并未通过 CI 强制执行。
  • scripts/verify_migration/main.go 内含直接数据库连接字符串,反映的是临时人工验证脚本,而不是可复用、无环境依赖的测试体系。

Prescriptive Summary

  • 讨论“测试”时,先区分三件事:README.md 的历史文档、AGENTS.md 的现行规则、仓库当前真实文件状态。
  • 在当前仓库中,默认不要新增 *_test.go;只有用户明确要求时才编写测试代码。
  • 日常验证优先使用静态检查脚本、OpenAPI 文档再生成、数据库手查、Postman/curl、人肉回归。
  • 判断 CI 是否有质量门时,以 .gitea/workflows/deploy.yaml 为准,而不是 README.md 的说明。

Testing analysis: 2026-03-27