后端测试与交付规范
后端测试与交付规范
适用场景
修改后端逻辑、JUnit 测试、Maven 配置或 README.md、DECISIONS.md、AI_USAGE.md 时加载。
测试规范
- 为新增或澄清的非平凡行为先补一个失败测试,再写最小实现。
- 纯领域逻辑使用 JUnit 5 和固定
Instant,不启动 Spring 上下文,不依赖真实时钟、网络、数据库或测试顺序。 - 测试可观察决策,不测试私有方法;除状态和动作外,还断言
safeToCreateAgain、reasonCode、回填值和nextCheckAt。 - 不删除、禁用或放宽 starter 测试。
- Controller、参数校验、异常映射和 traceId 过滤器优先使用
MockMvc的 MVC 切片测试;只有确需验证多层装配时才使用@SpringBootTest。 - Repository 使用与实际持久化方案匹配的切片或集成测试;不把 mock 数据库测试当成真实事务与约束证明。
优先覆盖:
- 三种不确定建单结果和非白名单拒绝均禁止重建。
- 重复确认、旧事件晚到和标识冲突。
- 唯一
PENDING、FAILED、CANCELLED。 - 默认上限为 3 时,查询前次数为 1 和 2 的边界。
- 多匹配、查询错误、字段缺失和引用不匹配。
- 人工审核的粘性和终态冲突。
验证门禁
- 从仓库根目录运行
mvn -f backend/pom.xml test。 - 涉及 HTTP 接口时,验证正常响应、校验失败和未处理异常都返回
X-Trace-Id,错误体中的traceId与请求、日志及审计记录一致。 - traceId 测试至少覆盖:合法请求头原样沿用、缺失或非法请求头生成新值、请求结束后 MDC 清理、下游调用继续传递当前值。
- 不存在的格式化或静态检查工具不为本次任务新增。
- 测试失败时报告具体失败和原因,不声称交付完成。
交付文档
README.md:运行命令、核心设计、已知限制和生产化缺口。DECISIONS.md:核心风险、状态转移、允许重建的唯一条件、人工处理条件,以及持久化、并发控制、消息去重和可观测性方案。AI_USAGE.md:使用的工具、AI 参与环节、验证方式和真实产品中的边界。- 文档必须与实际代码一致,不保留未说明的
TODO。
完成定义
mvn -f backend/pom.xml test全部通过。- 决策表、业务安全、幂等乱序和异常分类均有覆盖。
- 任何未知、冲突或不可证明安全的结果都不会导致重复下单或静默覆盖。
- 所有 HTTP 路径通过统一过滤器建立 traceId,Controller 不重复接收;请求、响应、错误日志和审计记录可按同一值关联。
- 未实现的生产化事项已记录而未越界实现。