工位 2 提示词 — shared/pkg:abstraction 全量补齐 + auth/repository 提升
你在 /home/a1/mybilibili 仓库,负责提升 shared/pkg(module mybilibili/pkg,go 1.26.5)的测试覆盖率。 本工位重点是把 abstraction 包补齐到 85%+,并把 auth、repository 提到 85%+。
目标任务
1. abstraction(当前 63.0%)→ 目标 85%+
目录:/home/a1/mybilibili/shared/pkg/abstraction/。 已有测试:discovery_memory_test.go、factory_test.go、stubs_test.go、file_queue_test.go、ollama_caller_test.go。 未测的 11 个文件:
minio_storage.go(MinIO 存储网关)nats_queue.go(NATS 队列)redis_cache.go(Redis 缓存;go test ./abstraction/... -cover会显示 redis 相关行未覆盖)cache_store.go/document_store.go/message_queue.go(接口 + 可能有内存/默认实现)search_engine.go/service_caller.go/service_discovery.go(抽象接口,可能有 grpc 实现)pg_jsonb.go/storage_service.go
策略(按优先级):
- 优先测接口约定 + 内存实现:stubs.go 已提供 memory 实现,先测这些接口的契约行为。
- redis_cache:用
github.com/alicebob/miniredis/v2(若不在依赖里,在 go.mod 加直接依赖并go mod tidy)或注入 fake 客户端。 - nats_queue:用
github.com/nats-io/nats-server/v2内嵌 server 或 nats.go 的 ephemeral server。 - minio_storage:若用 minio-go 具体类型且难 mock,可测其接口层分支(nil 检查、错误路径);确属无法注入的,跳过并报告,不改生产代码加接口。
- pg_jsonb / storage_service / search_engine / service_caller / service_discovery:读源码看是纯数据结构还是抽象声明;纯逻辑直接测,空接口可补契约性示例。
先看 notimpl.go、stubs.go 了解约定,再逐个文件确认哪些可直接测。
2. auth(70.3%)→ 目标 85%+
目录:/home/a1/mybilibili/shared/pkg/auth/,已有 jwt_test.go、middleware_test.go。 读 jwt.go、middleware.go 找未覆盖分支(无 token、过期 token、非法签名、错误 claim、header 缺失等),用 go test -cover ./auth/ 定位。
3. repository(66.7%)→ 目标 85%+
目录:/home/a1/mybilibili/shared/pkg/repository/,有 metrics.go、nullutil.go。 已有 nullutil_test.go。读 metrics.go 补未覆盖分支。
技术要点
- 测试放同目录,命名
xxx_test.go;若依赖新库(miniredis、nats-server),先查 go.work.sum/go.mod,决定加直接依赖并跑cd /home/a1/mybilibili/shared/pkg && go mod tidy(只允许加依赖,不乱动 go.mod 其他内容)。 - 绝不修改已有测试文件和生产代码;编译错误确认为 bug 才最小修并报告。
- 每完成一个文件/子包立即验证:
cd /home/a1/mybilibili/shared/pkg && go test ./abstraction/...(auth:./auth/...,repository:./repository/...)。 - 验收覆盖:
cd /home/a1/mybilibili/shared/pkg && go test ./abstraction/... ./auth/... ./repository/... -cover | grep coverage - 最终
cd /home/a1/mybilibili/shared/pkg && go test ./...与go vet ./...必须通过。 - 注意:
pb/(生成代码)与models/不要求测试,勿在这两个包浪费时间。
报告内容
- 每个子包覆盖率 before/after
- 新建测试文件清单
- 新增的依赖(如有)
- 遇到的问题与处理
- 不要 git commit/push。