新增测试代码规范、修复响应体断言缺失与魔法数字

- AGENTS.md 新增测试代码专项规范:常量、fixture、触发器、HTTP断言、层边界说明
- TestUpdateAllocationExpiryBaseHTTP 补全 PATCH 响应体字段断言
- 四个集成测试文件以 testIDMask 局部常量替换 0x7fffffff 魔法数字

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-23 11:35:38 +09:00
parent 4aaae07cee
commit d5a35f6360
5 changed files with 83 additions and 9 deletions

View File

@@ -349,5 +349,40 @@ queueClient.EnqueueTask(ctx, constants.TaskTypeXxx, payloadBytes)
---
## 测试代码规范(集成测试)
以下规则专门适用于 `_test.go` 文件,与生产代码规范有局部差异:
### 常量与魔法数字
- 测试文件内的魔法数字(如 `0x7fffffff`)在文件顶部定义**局部常量**即可,不要求进 `pkg/constants/`
```go
// 文件顶部,仅限测试内使用
const testIDMask = 0x7fffffff
```
- 跨多个测试文件共用的常量或工具函数才提取到 `internal/testutil/`
### 测试 Fixture Helper
- `createXxxCard`、`createXxxPackage` 等 fixture 函数优先放 `internal/testutil/`
- 同一 package 内 ≤3 处结构类似的 helper如 ICCID 前缀不同)不强制提取,差异本身就是测试设计意图
- 已在 `testutil` 中提供的能力(`NewPostgresTransaction`、`NewRedisClient`、`StringPointer`)必须复用,禁止本地重复定义
### 数据库触发器操作
- `ALTER TABLE ... DISABLE TRIGGER` 只允许在测试事务内使用(事务回滚后触发器状态自动恢复),必须加注释说明原因
### HTTP 集成测试断言
- 必须同时断言 **HTTP 响应体**和 **DB 状态**Spec 承诺返回的字段不能只靠 DB 查询替代
- 响应体断言至少验证所有 spec 要求的顶层字段非空或值正确,不必断言每个字段的精确中文名称
### 层边界说明
- 旧模块 `internal/service/xxx` 可以继续 import `internal/store/postgres`,这是项目触碰式迁移的既有模式
- DDD 层边界禁令(禁止 import Fiber / GORM / Redis**只对 `internal/domain/` 生效**service 层不受此约束
---
**详细规范和 OpenSpec 工作流请查看**: `@/openspec/AGENTS.md`