Files
cursor/plans/phpunit_钱包链路测试_003ec505.plan.md
2026-05-21 18:16:26 +08:00

84 lines
3.7 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.

---
name: PHPUnit 钱包链路测试
overview: 补齐本仓库的 PHPUnit 基建,并新增 register/bet/win 集成测试用例,默认在本地 php82 容器执行、连接真实依赖,以 HTTP 结果与余额变化作为核心断言。
todos:
- id: setup-phpunit
content: 补齐 PHPUnit 基建composer require-dev、phpunit.xml、tests/bootstrap.php
status: completed
- id: implement-feature-test
content: 实现 register/bet/win 集成测试与幂等/异常断言
status: completed
- id: run-in-container
content: 在 php82 容器执行测试并根据结果修正
status: completed
- id: document-runbook
content: 补充测试执行说明与可选增强项
status: completed
isProject: false
---
# PHPUnit Register/Bet/Win 测试落地计划
## 默认口径(基于当前信息)
- 测试框架PHPUnit当前仓库尚无 `phpunit.xml``tests/`)。
- 执行环境:本地 `php82` 容器。
- 依赖模式:默认连本地真实 MySQL/Redis贴近联调
- 断言范围:默认先做 API 返回与余额变化断言DB 深断言作为第二阶段可选扩展。
## 现状结论
- 缺少 PHPUnit 基建:未发现 `phpunit*.xml``tests/` 目录。
- `register/bet/win` 入口与逻辑已具备:
- 接口入口:[app/api/controller/WalletController.php](app/api/controller/WalletController.php)
- 业务编排:[app/api/logic/WalletLogic.php](app/api/logic/WalletLogic.php)
- 注册服务:[app/service/wallet/RegisterService.php](app/service/wallet/RegisterService.php)
## 实施步骤
1. **补测试基建**
-`require-dev` 增加 `phpunit/phpunit`
- 新增 `phpunit.xml`(定义 `tests/` 目录、bootstrap、环境变量覆盖
- 新增 `tests/bootstrap.php`(加载自动加载与测试环境初始化)。
2. **新增钱包链路集成测试**
- 新建测试文件:[tests/Feature/WalletRegisterBetWinTest.php](tests/Feature/WalletRegisterBetWinTest.php)
- 用例覆盖:
- `register` 成功(通过 `wallet/update` + `type=register`
- `bet` 成功并校验扣款后余额变化
- `win is_end=0` 中间派奖仅影响待结算展示
- `win is_end=1` 最终结算落账
- `bet` 重复 `biz_id` 幂等
- `win` 重复 `biz_id` 幂等
- `bet/win``round_id` 参数错误
- `win` 非法 `is_end` 参数错误
3. **测试数据与可重复执行设计**
- 每个测试生成独立 `uid/round_id/biz_id/trace_id`(时间戳+随机后缀),避免脏数据冲突。
- 用例内封装统一请求方法POST JSON与响应断言助手降低重复代码。
- 优先按顺序单线程执行此特性测试,避免并发串扰。
4. **执行与验证**
- 在容器内执行:`docker compose exec -T php82 php vendor/bin/phpunit --filter WalletRegisterBetWinTest`
- 验证输出:
- 所有用例通过
- 幂等场景无重复记账(通过返回余额不重复变化来断言)
5. **第二阶段可选增强(不在首版强制)**
- 增加 DB 断言(`wallet_log``wallet_fund_lot``wallet_bet_funding`)与 Redis pending key 清理断言。
- 将该测试纳入 CI job需环境可用性与测试隔离策略先达成一致
## 目标结构图
```mermaid
flowchart TD
testBootstrap[phpunitBootstrap] --> featureTest[WalletRegisterBetWinTest]
featureTest --> registerStep[register_update]
registerStep --> betStep[bet]
betStep --> winMidStep[win_is_end_0]
winMidStep --> winFinalStep[win_is_end_1]
winFinalStep --> idemCheck[idempotencyChecks]
idemCheck --> negativeCheck[invalidParamsChecks]
```
## 受影响文件(计划新增/修改)
- [composer.json](composer.json)
- [phpunit.xml](phpunit.xml)
- [tests/bootstrap.php](tests/bootstrap.php)
- [tests/Feature/WalletRegisterBetWinTest.php](tests/Feature/WalletRegisterBetWinTest.php)