测试分层策略
Forge Admin 采用分层测试策略,确保各层质量。
测试金字塔
/\
/ \ E2E 测试(少量,覆盖核心流程)
/----\
/ \ 集成测试(适量,覆盖模块交互)
/--------\
/ \ 单元测试(大量,覆盖核心逻辑)
/____________\分层说明
| 层级 | 范围 | 框架 | 执行速度 | 覆盖目标 |
|---|---|---|---|---|
| 单元测试 | Service / 工具类 | JUnit 5 + Mockito | 快(秒级) | 核心业务逻辑 |
| 集成测试 | Controller / Mapper | Spring Boot Test | 中(分钟级) | 接口和数据访问 |
| E2E 测试 | 完整业务流程 | — | 慢(分钟级) | 核心业务场景 |
覆盖率目标
| 模块类型 | 行覆盖率 | 分支覆盖率 |
|---|---|---|
| 框架层(Starter) | ≥ 80% | ≥ 70% |
| 业务插件(Plugin) | ≥ 70% | ≥ 60% |
| 业务模块 | ≥ 60% | ≥ 50% |
| 工具类 | ≥ 90% | ≥ 80% |
后端测试框架
| 框架 | 用途 | 版本 |
|---|---|---|
| JUnit 5 | 测试框架 | 5.10 |
| Mockito | Mock 依赖 | 5.x |
| Spring Boot Test | 集成测试 | 3.2 |
| AssertJ | 流式断言 | 3.x |
前端测试框架
| 框架 | 用途 | 版本 |
|---|---|---|
| Vitest | 单元测试 | 2.x |
| Vue Test Utils | 组件测试 | 2.x |
| Playwright | E2E 测试 | 1.x |
测试命名规范
java
// 单元测试命名:方法名_条件_期望结果
@Test
void createOrder_whenStockIsSufficient_shouldReturnSuccess() {}
// 集成测试命名:接口路径_场景_状态码
@Test
void getUserById_whenUserExists_shouldReturn200() {}测试文件位置
| 类型 | 后端位置 | 前端位置 |
|---|---|---|
| 单元测试 | src/test/java/ | src/**/__tests__/ |
| 集成测试 | src/test/java/ | — |
| E2E 测试 | src/test/java/ | e2e/ |
执行策略
| 阶段 | 执行内容 | 触发方式 |
|---|---|---|
| 开发时 | 单元测试 | IDE 手动执行 |
| 提交前 | 单元测试 + Lint | Git Hook |
| CI 流水线 | 全量测试 | 代码推送 |
| 发布前 | 全量测试 + E2E | 手动触发 |
