149 lines
3.1 KiB
Markdown
149 lines
3.1 KiB
Markdown
<!-- 由 BMAD™ Core 驱动 -->
|
||
|
||
# 测试级别框架
|
||
|
||
用于确定不同场景下适当测试级别(单元、集成、端到端)的综合指南。
|
||
|
||
## 测试级别决策矩阵
|
||
|
||
### 单元测试
|
||
|
||
**何时使用:**
|
||
|
||
- 测试纯函数和业务逻辑
|
||
- 算法正确性
|
||
- 输入验证和数据转换
|
||
- 隔离组件中的错误处理
|
||
- 复杂计算或状态机
|
||
|
||
**特点:**
|
||
|
||
- 执行速度快(即时反馈)
|
||
- 无外部依赖(数据库、API、文件系统)
|
||
- 高度可维护和稳定
|
||
- 易于调试失败
|
||
|
||
**示例场景:**
|
||
|
||
```yaml
|
||
unit_test:
|
||
component: 'PriceCalculator'
|
||
scenario: '使用多条规则计算折扣'
|
||
justification: '具有多个分支的复杂业务逻辑'
|
||
mock_requirements: '无 - 纯函数'
|
||
```
|
||
|
||
### 集成测试
|
||
|
||
**何时使用:**
|
||
|
||
- 组件交互验证
|
||
- 数据库操作和事务
|
||
- API 端点合约
|
||
- 服务间通信
|
||
- 中间件和拦截器行为
|
||
|
||
**特点:**
|
||
|
||
- 执行时间适中
|
||
- 测试组件边界
|
||
- 可能使用测试数据库或容器
|
||
- 验证系统集成点
|
||
|
||
**示例场景:**
|
||
|
||
```yaml
|
||
integration_test:
|
||
components: ['UserService', 'AuthRepository']
|
||
scenario: '创建具有角色分配的用户'
|
||
justification: '服务与持久化之间的关键数据流'
|
||
test_environment: '内存数据库'
|
||
```
|
||
|
||
### 端到端测试
|
||
|
||
**何时使用:**
|
||
|
||
- 关键用户旅程
|
||
- 跨系统工作流
|
||
- 可视化回归测试
|
||
- 合规性和法规要求
|
||
- 发布前最终验证
|
||
|
||
**特点:**
|
||
|
||
- 执行速度较慢
|
||
- 测试完整工作流
|
||
- 需要完整的环境设置
|
||
- 最真实但最脆弱
|
||
|
||
**示例场景:**
|
||
|
||
```yaml
|
||
e2e_test:
|
||
journey: '完成结账流程'
|
||
scenario: '用户使用已保存的支付方式购买'
|
||
justification: '需要全面验证的收入关键路径'
|
||
environment: '带有测试支付网关的预发环境'
|
||
```
|
||
|
||
## 测试级别选择规则
|
||
|
||
### 何时倾向于单元测试:
|
||
|
||
- 逻辑可以被隔离
|
||
- 不涉及副作用
|
||
- 需要快速反馈
|
||
- 圈复杂度高
|
||
|
||
### 何时倾向于集成测试:
|
||
|
||
- 测试持久层
|
||
- 验证服务合约
|
||
- 测试中间件/拦截器
|
||
- 组件边界至关重要
|
||
|
||
### 何时倾向于端到端测试:
|
||
|
||
- 面向用户的关键路径
|
||
- 多系统交互
|
||
- 法规遵从性场景
|
||
- 可视化回归很重要
|
||
|
||
## 要避免的反模式
|
||
|
||
- 使用端到端测试进行业务逻辑验证
|
||
- 单元测试框架行为
|
||
- 集成测试第三方库
|
||
- 跨级别的重复覆盖
|
||
|
||
## 重复覆盖防护
|
||
|
||
**在添加任何测试之前,请检查:**
|
||
|
||
1. 这是否已经在较低级别进行了测试?
|
||
2. 单元测试能否代替集成测试覆盖此项?
|
||
3. 集成测试能否代替端到端测试覆盖此项?
|
||
|
||
**仅在以下情况下,覆盖范围重叠是可接受的:**
|
||
|
||
- 测试不同方面(单元:逻辑,集成:交互,端到端:用户体验)
|
||
- 需要深度防御的关键路径
|
||
- 防止先前已损坏功能的回归
|
||
|
||
## 测试命名约定
|
||
|
||
- 单元:`test_{component}_{scenario}`
|
||
- 集成:`test_{flow}_{interaction}`
|
||
- 端到端:`test_{journey}_{outcome}`
|
||
|
||
## 测试ID格式
|
||
|
||
`{EPIC}.{STORY}-{LEVEL}-{SEQ}`
|
||
|
||
**示例:**
|
||
|
||
- `1.3-UNIT-001`
|
||
- `1.3-INT-002`
|
||
- `1.3-E2E-001`
|