14 KiB
14 KiB
后端 API 测试文档
位置:
gym-manage-api/| 框架: JUnit 5 + Mockito + Maven | 用例数: 1,094 | 通过率: 100%
一、概览
后端 API 由 15 个 Maven 模块组成,采用 Spring WebFlux 响应式架构,测试覆盖 Handler(HTTP 入口)、Service(业务逻辑)、Util(工具类)、Filter(过滤器)、Converter(数据转换)等全层级。
| 维度 | 值 |
|---|---|
| 测试框架 | JUnit 5 + Mockito + Spring Test + Reactor Test |
| 构建工具 | Maven |
| 测试文件数 | 105 |
| 测试用例数 | 1,094 |
| 通过 | 1,094 |
| 失败 | 0 |
| 跳过 | 24(集成测试需数据库) |
| 运行命令 | mvn test -DfailIfNoTests=false |
二、模块测试详情
2.1 manage-sys(系统管理核心)— 658 tests
最核心的模块,覆盖用户、角色、菜单、字典、配置、日志、审计、认证、安全等全部子系统。
Handler 层(HTTP 入口,共 135 tests)
| 测试类 | 文件 | 用例数 | 测试内容 |
|---|---|---|---|
SysAuthHandlerTest |
handler/auth/ |
9 | 登录、注册、登出 |
SysUserHandlerTest |
handler/user/ |
20 | 用户 CRUD、分页、批量操作、角色分配 |
SysRoleHandlerTest |
handler/role/ |
16 | 角色 CRUD、软删除/恢复、权限分配 |
MenuHandlerTest |
handler/menu/ |
13 | 菜单树查询、按类型筛选、父子关系 |
MenuHandlerDataIntegrityTest |
handler/menu/ |
11 | 菜单数据完整性、循环引用检测、并发 |
SysDictHandlerTest |
handler/dict/ |
17 | 字典类型+数据 CRUD、缓存刷新 |
DictionaryHandlerTest |
handler/dictionary/ |
9 | 字典管理完整流程 |
SysConfigHandlerTest |
handler/config/ |
9 | 系统配置增删改查、按 key 查询 |
SysLogHandlerTest |
handler/log/ |
18 | 登录日志查询、筛选、统计 |
OperationLogHandlerTest |
handler/log/ |
7 | 操作日志查询、按模块筛选 |
StatsHandlerTest |
handler/stats/ |
1 | 统计概览 |
AuditLogControllerTest |
audit/controller/ |
11 | 审计日志 CRUD、按实体/操作人/时间查询 |
Service 层(业务逻辑,共 157 tests)
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
SysUserServiceTest |
30 | 用户创建、密码加密、角色绑定、分页、批量删除 |
SysUserServiceIntegrationTest |
20 | 集成测试:用户+角色关联、事务回滚 |
SysRoleServiceTest |
25 | 角色权限分配、菜单绑定、软删除恢复 |
SysMenuServiceTest |
15 | 菜单树构建、排序、层级校验 |
SysDictTypeServiceTest |
12 | 字典类型 CRUD、数据校验 |
SysDictDataServiceTest |
12 | 字典数据 CRUD、类型关联 |
DictionaryServiceTest |
10 | 字典管理综合逻辑 |
SysConfigServiceTest |
8 | 配置参数校验、默认值 |
SysLoginLogServiceTest |
10 | 登录日志记录、统计 |
SysExceptionLogServiceTest |
8 | 异常日志记录、堆栈截断 |
OperationLogServiceTest |
7 | 操作日志切面逻辑 |
AuditLogServiceTest |
5 | 审计日志持久化、DTO转换 |
Domain / Primitive / DTO(值对象校验,共 180 tests)
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
SysUserTest |
23 | 用户领域模型验证(字段约束、状态转换) |
UsernameTest |
15 | 用户名格式校验(长度、字符集、特殊字符) |
PasswordTest |
45 | 密码强度规则、加密格式、哈希验证 |
PasswordDetailedTest |
40 | 密码复杂性详细规则(大小写、数字、特殊字符) |
EmailTest |
18 | 邮箱格式校验(RFC标准、中文邮箱) |
SysUserQueryTest |
8 | 用户查询对象(分页、排序、筛选条件) |
SysRoleQueryTest |
6 | 角色查询对象 |
CreateUserCommandTest |
10 | 创建用户命令校验 |
UpdateUserCommandTest |
8 | 更新用户命令校验 |
CreateRoleCommandTest |
7 | 创建角色命令校验 |
UserResponseTest |
5 | 用户响应 DTO |
AuthResponseTest |
3 | 认证响应 DTO |
FilePreviewResponseTest |
3 | 文件预览响应 DTO |
AuditLogTest |
6 | 审计日志领域模型 |
AuditLogQueryRequestTest |
5 | 审计查询请求校验 |
安全 / 过滤器(共 52 tests)
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
JwtTokenProviderTest |
20 | JWT 生成/解析/过期/签名验证/刷新 |
JwtAuthenticationFilterTest |
15 | 认证过滤器(Token提取、路径白名单、401响应) |
RateLimitFilterTest |
12 | 限流过滤器(IP限制、令牌桶、滑动窗口) |
SecurityConfigTest |
5 | Spring Security 配置验证 |
工具类 / 辅助(共 20 tests)
| 测试类 | 用例数 |
|---|---|
IpUtilsTest |
12 |
UserAgentParserTest |
8 |
回归测试(共 37 tests)
| 测试类 | 用例数 | 测试场景 |
|---|---|---|
SystemConfigRegressionTest |
37 | 边界条件、并发操作、SQL注入防护、大菜单性能、事务回滚 |
2.2 manage-gateway(网关)— 171 tests
微服务网关,负责 JWT 认证、RBAC 授权、签名验证、限流、熔断、路由、负载均衡。
过滤器(共 65 tests)
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
GatewayJwtAuthenticationFilterTest |
13 | JWT 解析:有效Token放行、无Token→401、无效Token→401、过期Token→401、公开路径放行 |
RbacAuthorizationFilterTest |
13 | RBAC 授权:管理员全路径、普通用户受限、多 HTTP 方法、权限继承 |
SignatureFilterTest |
9 | 请求签名:生成/验证/过期/篡改检测/重放防护 |
ResilienceFilterTest |
7 | 弹性策略:超时、重试、熔断半开状态 |
RateLimitFilterTest |
12 | 限流:IP维度、用户维度、令牌桶算法、并发控制 |
CompressionFilterTest |
11 | 响应压缩:gzip、brotli、大小阈值 |
服务层(共 55 tests)
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
SignatureServiceImplTest |
12 | 签名服务实现 |
PermissionServiceImplTest |
10 | 权限校验服务 |
JwtKeyServiceImplTest |
8 | JWT 密钥管理 |
DynamicRouteServiceTest |
8 | 动态路由加载/更新/删除 |
RequestCacheServiceTest |
5 | 请求缓存 |
AuditLogServiceTest |
7 | 网关审计日志 |
CustomLoadBalancerTest |
5 | 自定义负载均衡 |
集成测试(共 6 tests)
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
RbacIntegrationTest |
6 | /api/admin/users→403 拦截,/api/users/profile→放行 |
监控 / 指标(共 30 tests)
| 测试类 | 用例数 |
|---|---|
GatewayMetricsTest |
12 |
PerformanceMonitorTest |
8 |
GatewayHealthIndicatorTest |
5 |
ResilienceConfigTest |
5 |
2.3 manage-db(数据库)— 72 tests
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
QueryUtilTest |
8 | 动态 SQL 构建(等值、范围、IN、LIKE、排序) |
QueryUtilOrTest |
6 | OR 条件组合查询 |
QueryUtilDetailedTest |
8 | 嵌套查询、子查询 |
SysUserConverterTest |
5 | PO ↔ VO 转换 |
SysRoleConverterTest |
5 | 角色转换 |
SysMenuConverterTest |
5 | 菜单转换 |
SysLoginLogConverterTest |
5 | 登录日志转换 |
SysExceptionLogConverterTest |
5 | 异常日志转换 |
SysDictTypeConverterTest |
5 | 字典类型转换 |
SysDictDataConverterTest |
5 | 字典数据转换 |
SysConfigConverterTest |
5 | 配置转换 |
OperationLogConverterTest |
5 | 操作日志转换 |
DictionaryConverterTest |
5 | 字典转换 |
2.4 manage-common(通用工具)— 62 tests
覆盖 Redis、签名、JWT、加密、序列化等公共工具类。
2.5 manage-notify(通知公告)— 21 tests
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
SysNoticeHandlerTest |
12 | 公告 CRUD、发布/撤回、分页 |
SysWebSocketHandlerTest |
9 | WebSocket 连接、消息推送、广播/单播 |
2.6 manage-file(文件管理)— 17 tests
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
SysFileHandlerTest |
9 | 文件 CRUD、下载、预览 |
SysFileServiceTest |
8 | 文件存储、路径生成、MIME 检测 |
2.7 manage-app(管理端)— 22 tests
| 测试类 | 用例数 | 类型 | 说明 |
|---|---|---|---|
RateLimitConfigTest |
2 | 单元 | 限流配置验证 |
MultipartConfigTest |
2 | 单元 | 文件上传配置 |
ManualTableCreationTest |
1 | 集成 | 手动建表验证 |
DatabaseInitTest |
5 | 集成 | 数据库初始化 |
SysUserServiceIntegrationTest |
5 | 集成 | 用户服务集成 |
OperationLogIntegrationTest |
4 | 集成 | 操作日志集成 |
OperationLogExportIntegrationTest |
3 | 集成 | 日志导出 |
注:15 个集成测试需数据库连接,标记为 SKIP(跳过 17 个含 setup 方法)
2.8 gym-member(会员管理)✨ 新增 — 40 tests
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
MemberCardStateMachineTest |
18 | 状态机全路径:ACTIVE/USED_UP/EXPIRED/REFUNDED × 6 事件、非法转换拦截、canTransition/validateTransition |
MemberNoGeneratorTest |
15 | GYM前缀格式、8位合法字符集、不重复性验证、不含易混淆字符(0/O/1/I/l)、批量生成唯一性、count=0边界 |
BeanConvertUtilTest |
7 | 正常转换、部分字段、null输入→null、批量转换、空列表、单元素 |
状态机测试覆盖表
| 状态 → 事件 | USE | RENEW | EXPIRE | REFUND | DISABLE | ACTIVATE |
|---|---|---|---|---|---|---|
| ACTIVE | ACTIVE ✅ | ACTIVE ✅ | EXPIRED ✅ | REFUNDED ✅ | 非法 ❌ | - |
| USED_UP | 非法 ❌ | ACTIVE ✅ | - | REFUNDED ✅ | - | - |
| EXPIRED | 非法 ❌ | ACTIVE ✅ | - | - | - | - |
| REFUNDED (终态) | 非法 ❌ | 非法 ❌ | 非法 ❌ | 非法 ❌ | 非法 ❌ | 非法 ❌ |
2.9 gym-auth(手机号认证)✨ 新增 — 10 tests
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
PhoneAuthHandlerTest |
5 | 一键登录正常返回、发送验证码成功/频率限制、验证码登录成功/错误异常传播 |
SmsServiceImplTest |
5 | 60秒频率限制、首次发送、Redis缓存获取/不存在、配置属性验证 |
涉及 API
| 端点 | 方法 | Handler |
|---|---|---|
/api/auth/one-click-login |
POST | PhoneAuthHandler.oneClickLogin |
/api/auth/send-sms-code |
POST | PhoneAuthHandler.sendSmsCode |
/api/auth/code-login |
POST | PhoneAuthHandler.codeLogin |
2.10 gym-dataCount(数据统计)✨ 新增 — 8 tests
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
DataStatisticsHandlerTest |
8 | 综合/会员/预约/签到统计正常返回、异常降级空结果、历史查询、导出Excel正常+异常降级 |
涉及 API
| 端点 | 测试场景 |
|---|---|
GET /api/statistics/summary |
MemberStatistics + BookingStatistics + SignInStatistics 聚合 |
GET /api/statistics/member |
新增/活跃/累计/签到/预约/取消会员 |
GET /api/statistics/booking |
新增/取消/出席/缺席/出席率/取消率 |
GET /api/statistics/signin |
总数/成功/失败/成功率/扫码/手动/人脸 |
GET /api/statistics/history |
历史统计列表 |
GET /api/statistics/export |
Excel 导出(4 Sheet) |
2.11 gym-checkIn(签到)— 10 tests
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
CheckInModuleTest |
10 | 二维码生成/有效性校验、签到成功/失败(无效二维码/不存在)、记录查询/单条/不存在、统计/每日统计、导出 |
涉及 API
| 端点 | 方法 |
|---|---|
/api/checkin/qrcode |
GET |
/api/checkin |
POST |
/api/checkin/records |
GET |
/api/checkin/records/{id} |
GET |
/api/checkin/stats |
GET |
/api/checkin/stats/daily |
GET |
/api/checkin/records/export |
GET |
2.12 gym-groupCourse(团课)— 3 tests
| 测试类 | 用例数 | 测试内容 |
|---|---|---|
QRCodeUtilTest |
3 | QR 码生成、内容编码/解码、边界尺寸 |
2.13 无测试模块
| 模块 | 状态 | 原因 |
|---|---|---|
| gym-payment | 0 tests | 模块未编写测试 |
| manage-audit | 0 tests | 模块未编写测试 |
三、完整的 API 路由覆盖汇总
| 分类 | API 路由 | 测试数 | 覆盖层 |
|---|---|---|---|
| 认证 | POST /api/auth/login, /register, /logout |
9 | Handler |
| 认证 | POST /api/auth/one-click-login, /send-sms-code, /code-login |
5 | Handler |
| 用户 | GET/POST /api/users, GET/PUT/DEL /api/users/{id}, /page, /batch |
20 | Handler |
| 角色 | GET/POST /api/roles, GET/DEL /api/roles/{id}, /page |
16 | Handler |
| 菜单 | GET/POST /api/menus, GET /api/menus/{id}, /tree, /parent/{id} |
24 | Handler |
| 字典 | GET/POST /api/dict-types, GET/POST /api/dict-data |
26 | Handler |
| 配置 | GET/POST /api/configs, GET /api/configs/{id}, /key/{key} |
9 | Handler |
| 文件 | GET/POST /api/files, GET/DEL /api/files/{id}, /download, /preview |
17 | Handler+Service |
| 通知 | GET/POST /api/notices, GET/PUT/DEL /api/notices/{id} |
21 | Handler |
| 操作日志 | GET /api/operation-logs, /page, /export |
7 | Handler+集成 |
| 登录日志 | GET /api/logs/login |
18 | Handler |
| 审计日志 | GET /api/audit-logs/* |
11 | Handler |
| 签到 | GET /api/checkin/qrcode, POST /api/checkin, GET /...{id}, /stats, /export |
10 | Handler |
| 统计 | GET /api/statistics/summary, /member, /booking, /signin, /history, /export |
8 | Handler |
| 统计 | GET /api/stats/overview |
1 | Handler |
| 网关 | JWT/RBAC/签名/限流/熔断/路由(非HTTP端点) | 171 | Filter+Service |
四、运行方式
# 进入后端目录
cd gym-manage-api
# 运行全量测试
mvn test -DfailIfNoTests=false
# 运行单个模块
mvn test -pl gym-member -DfailIfNoTests=false
# 运行单个测试类
mvn test -pl gym-member "-Dtest=cn.novalon.gym.manage.member.handler.MemberCardStateMachineTest"
# 编译但不运行测试
mvn compile -DskipTests
五、测试架构
测试层级:
Handler → Mock Service → 验证 HTTP 状态码 + 响应体
Service → Mock Repository → 验证业务逻辑 + 事务
Filter → Mock Exchange → 验证过滤规则 + 异常处理
Util → 纯单元测试 → 验证输入输出 + 边界
Domain → 值对象测试 → 验证构造/校验/不变性
Converter→ Mock 源对象 → 验证字段映射完整
Integration → 真实 DB/H2 → 端到端业务流程
文档生成时间: 2026-07-21 | 测试工具: JUnit 5 + Mockito + Reactor Test + Maven