BMAD-METHOD/bmad-core/data/test-levels-framework.md

149 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.

<!-- 由 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`