⚠️ MVP 阶段说明
本项目为全新项目,尚未上线,当前处于 MVP(最小可行产品)阶段。
本文档记录的是 MVP 版本的测试用例和覆盖率目标,后续会持续补充和完善。版本:v1.1-MVP | 更新日期:2026-07-01 | 状态:开发中
| 层次 | 说明 |
|---|---|
| 单元测试 | Service 层业务逻辑 |
| 集成测试 | Controller + Service + DB 端到端 |
| 安全测试 | 认证、授权、白名单验证 |
| 限流测试 | Redis 滑动窗口限流策略 |
| 接口测试 | API 参数校验、响应格式 |
| 工具 | 说明 |
|---|---|
| JUnit 5 | 测试框架 |
| Spring Boot Test | 集成测试 |
| MockMvc | HTTP 接口模拟 |
| H2 Database | 嵌入式测试数据库 |
| Mockito | Mock Redis 等外部依赖 |
testtest-schema.sql| 编号 | 用例 | 预期结果 |
|---|---|---|
| AUTH-01 | POST /api/auth/sms/send - 手机号格式错误 | 400, code=400 |
| AUTH-02 | POST /api/auth/sms/send - 场景参数无效 | 400 |
| AUTH-03 | POST /api/auth/sms/login - 验证码格式错误 | 400 |
| AUTH-04 | POST /api/auth/sms/login - 验证码错误 | 200, 业务错误码 |
| AUTH-05 | GET /api/auth/wechat/url - 获取微信登录URL | 200, 返回URL字符串 |
| AUTH-06 | GET /api/auth/wechat/callback - 微信回调 | 200, 返回重定向URL |
| AUTH-07 | GET /api/auth/user/info - 有效Token | 200, 返回用户信息 |
| 编号 | 用例 | 预期结果 |
|---|---|---|
| SEC-01 | GET /api/level/list - 无Token公开访问 | 200 |
| SEC-02 | POST /api/auth/sms/send - 无Token公开访问 | 非401 |
| SEC-03 | POST /api/auth/sms/login - 无Token公开访问 | 非401 |
| SEC-04 | GET /api/auth/wechat/url - 无Token公开访问 | 非401 |
| SEC-05 | GET /api/level/my - 无Token | 401 |
| SEC-06 | GET /api/crawler/status - 无Token | 401 |
| SEC-07 | GET /api/coupon/my - 无Token | 401 |
| SEC-08 | GET /api/auth/user/info - 无Token | 401 |
| SEC-09 | GET /api/level/my - 有效Token | 200 |
| SEC-10 | GET /api/crawler/status - 有效Token | 200 |
| SEC-11 | 携带无效Token | 401 |
| 编号 | 用例 | 预期结果 |
|---|---|---|
| GW-01 | 请求日志记录 | 日志包含请求路径、耗时 |
| GW-02 | 慢请求告警 | 超过1000ms打印WARN |
| GW-03 | 限流-正常请求 | 200 |
| GW-04 | 限流-超出阈值 | 429 |
| GW-05 | 限流-短信接口更严格 | 10次/60s |
| GW-06 | 排除路径不记录日志 | /actuator/health 不记录 |
| 编号 | 用例 | 预期结果 |
|---|---|---|
| LVL-01 | GET /api/level/list - 获取等级列表 | 200, 包含3个等级 |
| LVL-02 | GET /api/level/my - 获取当前用户等级 | 200 |
| LVL-03 | GET /api/level/{id} - 获取等级详情 | 200 |
| 编号 | 用例 | 预期结果 |
|---|---|---|
| PAY-01 | GET /api/payment/plans - 无需认证返回方案列表 | 200, 方案数组 |
| PAY-02 | GET /api/payment/plans - 方案含价格、会员等级等字段 | 200, price/membershipLevel存在 |
| PAY-03 | POST /api/payment/order/create - 微信支付返回二维码 | 200, channel=WECHAT, qrCodeBase64存在 |
| PAY-04 | POST /api/payment/order/create - 支付宝返回二维码 | 200, channel=ALIPAY |
| PAY-05 | POST /api/payment/order/create - 无效渠道返回错误 | 200, code=2004 |
| PAY-06 | POST /api/payment/order/create - 无Token返回401 | 401 |
| PAY-07 | GET /api/payment/order/{orderNo} - 查询存在订单 | 200, 返回详情 |
| PAY-08 | GET /api/payment/order/{orderNo} - 不存在订单返回错误 | 200, code=2001 |
| PAY-09 | POST /api/payment/order/{orderNo}/pay - 模拟支付成功 | 200, status=PAID, paidTime存在 |
| PAY-10 | POST /api/payment/order/{orderNo}/pay - 已支付订单再次支付 | 200, code=2005 |
| PAY-11 | GET /api/payment/orders - 查询用户订单列表 | 200, data为数组 |
| PAY-12 | POST /api/payment/callback/wechat - 缺少订单号 | 200, 返回FAIL |
| PAY-13 | POST /api/payment/callback/alipay - 缺少订单号 | 200, 返回fail |
| 编号 | 用例 | 优先级 |
|---|---|---|
| INV-01 | GET /api/invite/code - 获取邀请码 | P1 |
| INV-02 | GET /api/invite/stats - 邀请统计 | P1 |
| INV-03 | GET /api/invite/page/{code} - 落地页(公开) | P1 |
| INV-04 | POST /api/invite/click/{code} - 点击追踪 | P2 |
| INV-05 | GET /api/invite/rewards - 邀请记录 | P1 |
| INV-06 | 邀请注册 → 自动发放奖励 → 验证配额增加 | P1 |
| INV-07 | 多渠道落地页(channel=app/wechat/miniapp) | P2 |
| INV-08 | GET /api/invite/my-inviter - 已注册用户查询邀请人信息 | P1 |
| INV-09 | GET /api/invite/my-inviter - 未被邀请的用户返回invited=false | P1 |
| INV-10 | POST /api/invite/bind - 补填邀请码成功 | P1 |
| INV-11 | POST /api/invite/bind - 无效邀请码返回错误 | P1 |
| INV-12 | POST /api/invite/bind - 已有邀请关系时拒绝重复绑定 | P2 |
| INV-13 | 补填邀请码后 → my-inviter 返回对应邀请人信息 | P1 |
| 编号 | 用例 | 优先级 |
|---|---|---|
| CRL-01 | GET /api/crawler/status - 配额状态含额外配额明细 | P1 |
| CRL-02 | POST /api/crawler/consume - 消耗等级配额 | P1 |
| CRL-03 | POST /api/crawler/consume - 消耗额外配额(快过期优先) | P1 |
| CRL-04 | POST /api/crawler/consume - 使用优惠券补充 | P2 |
| CRL-05 | POST /api/crawler/consume - 配额不足拒绝 | P1 |
| CRL-06 | 日配额耗尽 → 返回拒绝 | P1 |
| CRL-07 | 月配额耗尽 → 返回拒绝 | P1 |
| CRL-08 | 过期配额自动标记 | P2 |
| 编号 | 用例 | 优先级 |
|---|---|---|
| ADM-01 | GET /api/admin/invite/config - 获取邀请配置 | P1 |
| ADM-02 | PUT /api/admin/invite/config - 更新邀请配置 | P1 |
| ADM-03 | POST /api/admin/crawler/grant - 手动发放爬虫次数 | P1 |
| ADM-04 | GET /api/admin/crawler/grants - 查看发放记录 | P1 |
| 编号 | 用例 | 优先级 |
|---|---|---|
| CPN-01 | POST /api/coupon/issue - 发放优惠券 | P1 |
| CPN-02 | GET /api/coupon/my - 我的优惠券列表 | P1 |
| CPN-03 | GET /api/coupon/my/available - 可用优惠券 | P2 |
| CPN-04 | 爬虫消耗优先使用优惠券 | P1 |
| 编号 | 用例 | 优先级 |
|---|---|---|
| DUP-01 | 渠道切换 - PENDING订单切换渠道成功 | P0 |
| DUP-02 | 渠道切换 - 已支付订单切换渠道拒绝 | P1 |
| DUP-03 | 渠道切换 - 已过期订单切换渠道拒绝 | P1 |
| DUP-04 | 重复支付回调 - 订单已PAID时第二笔回调记录重复支付 | P0 |
| DUP-05 | 重复支付回调 - 同一tradeNo幂等不重复记录 | P0 |
| DUP-06 | 自动退款 - 微信渠道重复支付触发退款(mock模式) | P0 |
| DUP-07 | 自动退款 - 支付宝渠道重复支付触发退款(mock模式) | P0 |
| DUP-08 | 退款状态 - 退款成功后refund_status=SUCCESS | P0 |
| DUP-09 | 退款失败 - 记录refund_fail_reason,refund_status=FAILED | P1 |
| DUP-10 | 退款幂等 - 同一重复支付记录不重复退款 | P1 |
mvn test
mvn test -pl zhijiayun-gateway
mvn test -pl zhijiayun-gateway -Dtest=AuthControllerTest
mvn test -pl zhijiayun-gateway -Dtest="AuthControllerTest#sendCode_invalidPhone_shouldReturnBadRequest"
注:旧的等级版本体系(NORMAL/VIP/SVIP)已下线,统一迁移至会员体系(PLUS/PRO/ULTRA)。 爬虫配额现在由会员权益配置 + 日/月/年三周期 + 额外配额组成。
| membership_level | daily_quota | monthly_quota | yearly_quota | max_concurrent |
|---|---|---|---|---|
| PLUS | 10 | 200 | 2000 | 2 |
| PRO | 50 | 1000 | 10000 | 5 |
| ULTRA | 200 | 5000 | 50000 | 10 |
通过 generateAccessToken(userId, phone) 动态生成 JWT Token,无需预置用户。
| 模块 | 行覆盖率目标 | 分支覆盖率目标 |
|---|---|---|
| zhijiayun-user | 70% | 60% |
| zhijiayun-invite | 70% | 60% |
| zhijiayun-payment | 70% | 60% |
| zhijiayun-gateway | 80% | 70% |
| 整体 | 70% | 60% |