Files
global-coding-governance/java-coding-style/references/06-测试审查与验证.md
T
2026-07-25 23:45:09 +08:00

68 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试、审查与验证
## 测试设计
- **必须**:测试代码放在项目约定的测试源集,通常为 `src/test/java`;不得把测试逻辑混入生产代码。
- **必须**:每个测试具有清晰的 Arrange/Act/Assert 或 Given/When/Then 结构,一个失败能指出一个主要行为。
- **必须**:测试独立、可重复、可并行时不互相污染;不得依赖执行顺序、真实当前时间、随机外网或共享生产数据。
- **必须**:断言业务结果、状态变化和外部交互,不只断言“无异常”或覆盖实现细节。
- **推荐**:遵循 AIR 原则:Automatic、Independent、Repeatable;覆盖 BCDEBoundary、Correct、Design、Error。
- **必须**:缺陷修复先加入能复现问题的测试;新行为先建立失败证据,再实现通过。
- **推荐**:单元测试隔离自身职责,集成测试验证真实框架映射、事务、序列化和数据库行为。
- **必须**:Mock 只隔离边界,不复刻被测实现;过多 Mock 通常提示职责或测试层级错误。
- **推荐**:测试命名表达条件与预期,服从项目现有 JUnit/TestNG、Mockito、AssertJ 等风格。
## 风险用例
按任务选择至少检查:
- null、空值、最小/最大长度、零、负数、溢出、重复和非法枚举;
- 精度、舍入、字符编码、Locale、时区和夏令时;
- 超时、重试、重复请求、部分失败、事务回滚和幂等;
- 并发更新、锁竞争、中断、资源关闭和线程池拒绝;
- 未认证、未授权、越权、注入、恶意大输入和敏感信息泄漏;
- 序列化前后兼容、数据库映射和旧调用方行为。
## Code Review 清单
1. 将每条需求映射到实现与至少一项验证证据。
2. 阅读完整 diff 和必要上下文,不只看新增行。
3. 检查是否覆盖用户已有改动或包含无关格式化。
4. 检查空值、异常、资源、并发、事务、数据规模和安全边界。
5. 检查 API、DTO、SQL、配置与依赖的兼容性。
6. 检查测试能在错误实现下失败,避免只验证 Mock 自己的返回。
7. 将发现按 `阻断/严重/一般/建议` 分级,并给出触发条件和影响。
8. 修复后重新阅读 diff 并重跑受影响验证。
## 命令选择
先从仓库文档和 CI 获取标准命令,常见候选仅供识别:
```text
Maven: ./mvnw test
Gradle: ./gradlew test
```
不要假定包装器、模块名或 profile 一定存在。优先运行:
1. 单个受影响测试;
2. 受影响模块测试;
3. 编译与项目配置的 formatter/Checkstyle/PMD/SpotBugs
4. 风险要求的集成测试或全量构建。
项目已配置 P3C 时使用既有入口。若未配置,进行人工规则 Review,并把“未运行 P3C”明确写为未验证项,而不是临时修改构建。
## 结果报告
每项验证记录:
```text
命令或检查:
范围:
结果:通过 / 失败 / 未执行
证据摘要:
失败或未执行原因:
```
只报告本次实际获得的证据。环境错误、既有失败和本次回归必须区分;无法确定归属时标记为待调查,不得猜测。