# 测试级别框架 用于确定不同场景下适当测试级别(单元、集成、端到端)的综合指南。 ## 测试级别决策矩阵 ### 单元测试 **何时使用:** - 测试纯函数和业务逻辑 - 算法正确性 - 输入验证和数据转换 - 隔离组件中的错误处理 - 复杂计算或状态机 **特点:** - 执行速度快(即时反馈) - 无外部依赖(数据库、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`