# 补贴发放记录 — 测试用例

> 依据：`补贴发放记录功能需求.md`、`补贴发放记录技术方案.md`  
> **接口 Base Path（示例）**：`/policy/subsidyRecord`；若含 `context-path` 或网关前缀须补齐。鉴权与若依一致（Cookie / Token）。

**通用前置（无特殊说明）**：具备本模块菜单与按钮权限的账号已登录。**补贴类型**：`1` 农业生产、`2` 住房基建、`3` 民生保障。**测试数据**：合法 18 位身份证（含校验位）、11 位手机号、16～19 位数字银行账户、金额 &gt; 0 且最多 2 位小数；发放日期默认 ≤ 当天。

**界面（UI）测试**：借助 **Playwright** 启动 **Chromium**（与 **Google Chrome 同源内核**）；可配置 `channel: 'chrome'` 调用本机已安装的谷歌浏览器。

---

## 一、单元测试用例

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ZCZX-BTJL-UT-001 | 参数校验 | 补贴项目名称长度 | 单元测试 | JUnit5 | 1～20 字 | 无 | 空串、1 字、20 字、21 字 | 空/21 失败；1～20 通过 |
| ZCZX-BTJL-UT-002 | 参数校验 | 受补贴人姓名长度 | 单元测试 | JUnit5 | 1～10 字 | 无 | 空串、1 字、10 字、11 字 | 空/11 失败；1～10 通过 |
| ZCZX-BTJL-UT-003 | 参数校验 | 补贴类型枚举 | 单元测试 | JUnit5 | 仅 1～3 | 无 | `subsidyType` 为 1/3 通过；0、4、null 失败 | 与技术方案 §2.2 一致 |
| ZCZX-BTJL-UT-004 | 参数校验 | 身份证号 | 单元测试 | JUnit5 | 18 位+校验位 | 无 | 合法号、17 位、非法校验位、含非法字符 | 仅合法通过 |
| ZCZX-BTJL-UT-005 | 参数校验 | 联系电话 | 单元测试 | JUnit5 | 大陆手机号 | 无 | 合法 11 位、10 位、非 1 开头 | 仅合法通过 |
| ZCZX-BTJL-UT-006 | 参数校验 | 银行账户 | 单元测试 | JUnit5 | 16～19 位数字 | 无 | 15 位、16 位、19 位、20 位、含字母 | 16～19 数字通过；其余失败 |
| ZCZX-BTJL-UT-007 | 参数校验 | 补贴金额 | 单元测试 | JUnit5 | &gt;0，2 位小数 | 无 | 0、-1、0.01、999999.99、三位小数 | 0/负/三位小数失败；合法正数通过 |
| ZCZX-BTJL-UT-008 | 参数校验 | 发放日期 | 单元测试 | JUnit5 | 非未来 | 无 | 明天、今天、昨天、非法格式 | 未来/非法失败；今天及过去通过 |
| ZCZX-BTJL-UT-009 | 查询校验 | 日期区间 | 单元测试 | JUnit5 | §5.2 | 无 | `validateDateRange(start,end)`：start&gt;end、仅 start、仅 end、相等 | 非法区间失败；合法通过 |
| ZCZX-BTJL-UT-010 | Service | 新增落库 | 单元测试 | JUnit5+Mockito | 正常登记 | 合法实体 | `insert(record)` | 各字段与入参一致；有 `create_time` |
| ZCZX-BTJL-UT-011 | Service | 修改全字段 | 单元测试 | JUnit5+Mockito | §5.3 | 已存在 id | `update(record)` 改金额/日期 | 更新成功；`update_time` 变化 |
| ZCZX-BTJL-UT-012 | Service | 删除记录 | 单元测试 | JUnit5+Mockito | §5.4 | Mock Mapper | `deleteByIds([id])` | 调用删除；无文件清理逻辑 |
| ZCZX-BTJL-UT-013 | Service | 列表排序 SQL | 单元测试 | JUnit5 | 技术方案 | 无 | 检查列表查询 ORDER BY | 含 `grant_date DESC`, `create_time DESC` |
| ZCZX-BTJL-UT-014 | 脱敏 | 身份证脱敏 | 单元测试 | JUnit5 | §3.4 可选 | 明文 18 位 | `maskIdCard(s)` | 前 4+后 4 可见，中间 `*` |
| ZCZX-BTJL-UT-015 | 脱敏 | 手机号脱敏 | 单元测试 | JUnit5 | §3.4 可选 | 11 位手机号 | `maskPhone(s)` | 前 3+后 4，中间 `****` |
| ZCZX-BTJL-UT-016 | 脱敏 | 无特权详情脱敏 | 单元测试 | JUnit5+Mockito | 权限 | 用户无完整查看权 | `toListVo(record,false)` | 敏感字段为脱敏值 |

---

## 二、接口测试用例

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ZCZX-BTJL-API-001 | 列表 | 默认分页排序 | 接口测试 | Postman/curl | §5.2 | 已登录；有多条不同发放日 | `GET /industryPolicy/subsidyRecord/list` | `rows`≤20；按 `grantDate` 新在前 |
| ZCZX-BTJL-API-002 | 列表 | 姓名模糊 | 接口测试 | Postman | 姓名筛选 | 已登录 | `recipientName=` 唯一片段 | 命中姓名含该片段记录 |
| ZCZX-BTJL-API-003 | 列表 | 类型筛选-农业 | 接口测试 | Postman | 精确 | 已登录 | `subsidyType=1` | 均为农业生产 |
| ZCZX-BTJL-API-004 | 列表 | 类型筛选-住房 | 接口测试 | Postman | 精确 | 已登录 | `subsidyType=2` | 均为住房基建 |
| ZCZX-BTJL-API-005 | 列表 | 类型筛选-民生 | 接口测试 | Postman | 精确 | 已登录 | `subsidyType=3` | 均为民生保障 |
| ZCZX-BTJL-API-006 | 列表 | 发放日期闭区间 | 接口测试 | Postman | start/end | 已知 grantDate 样本 | `startDate`、`endDate` 含样本日 | 仅区间内记录 |
| ZCZX-BTJL-API-007 | 列表 | 仅 startDate | 接口测试 | Postman | ≥开始 | 已登录 | 只传 `startDate` | 发放日 ≥ startDate |
| ZCZX-BTJL-API-008 | 列表 | 仅 endDate | 接口测试 | Postman | ≤结束 | 已登录 | 只传 `endDate` | 发放日 ≤ endDate |
| ZCZX-BTJL-API-009 | 列表 | 日期区间非法 | 接口测试 | Postman | 异常 | 已登录 | `startDate`&gt;`endDate` | 失败；可读 `msg`；不返回业务数据 |
| ZCZX-BTJL-API-010 | 列表 | 组合查询 | 接口测试 | Postman | 多条件 | 已登录 | 姓名+类型+日期 | 同时满足 |
| ZCZX-BTJL-API-011 | 新增 | 合法全字段 | 接口测试 | Postman | §5.1 | 已登录 | `POST` Body 八项必填合法 | `code` 成功；详情可查 |
| ZCZX-BTJL-API-012 | 新增 | 项目名称非法 | 接口测试 | Postman | 1～20 | 已登录 | 项目名空/21 字 | 失败；无新记录 |
| ZCZX-BTJL-API-013 | 新增 | 姓名非法 | 接口测试 | Postman | 1～10 | 已登录 | 姓名空/11 字 | 失败 |
| ZCZX-BTJL-API-014 | 新增 | 类型非法 | 接口测试 | Postman | 枚举 | 已登录 | `subsidyType=0` 或 `99` | 失败 |
| ZCZX-BTJL-API-015 | 新增 | 身份证非法 | 接口测试 | Postman | 校验 | 已登录 | 错误 `idCard` | 失败；提示身份证类错误 |
| ZCZX-BTJL-API-016 | 新增 | 手机号非法 | 接口测试 | Postman | 校验 | 已登录 | 10 位或非手机号 | 失败 |
| ZCZX-BTJL-API-017 | 新增 | 银行账户非法 | 接口测试 | Postman | 16～19 | 已登录 | 15 位或含字母 | 失败 |
| ZCZX-BTJL-API-018 | 新增 | 金额非法 | 接口测试 | Postman | &gt;0 | 已登录 | `subsidyAmount=0` 或负数 | 失败 |
| ZCZX-BTJL-API-019 | 新增 | 未来发放日 | 接口测试 | Postman | 日期 | 已登录 | `grantDate` 为明天 | 失败 |
| ZCZX-BTJL-API-020 | 详情 | 有效 id | 接口测试 | Postman | §5.5 | 已登录 | `GET .../subsidyRecord/{id}` | 含八项业务字段及审计字段 |
| ZCZX-BTJL-API-021 | 详情 | 无效 id | 接口测试 | Postman | 异常 | 已登录 | 不存在 id | 404 或业务失败 |
| ZCZX-BTJL-API-022 | 修改 | 合法修改 | 接口测试 | Postman | §5.3 | 已登录；有记录 | `PUT` 改金额、发放日 | 成功；详情已更新 |
| ZCZX-BTJL-API-023 | 修改 | 校验仍生效 | 接口测试 | Postman | 异常 | 已登录 | `PUT` 改手机号为非法 | 失败；原数据不变 |
| ZCZX-BTJL-API-024 | 删除 | 单条删除 | 接口测试 | Postman | §5.4 | 已登录 | `DELETE .../subsidyRecord/{id}` | 成功；列表无该 id |
| ZCZX-BTJL-API-025 | 删除 | 批量删除 | 接口测试 | Postman | 批量 | 已登录；多条 id | `DELETE .../id1,id2` | 成功；均不可查 |
| ZCZX-BTJL-API-026 | 端到端 | CRUD 串联 | 接口测试 | Postman | §4 | 已登录 | 新增→查列表→详情→改→删 | 全流程成功 |
| ZCZX-BTJL-API-027 | 鉴权 | 未登录 | 接口测试 | curl | 安全 | 无 Token | `GET .../list` | 401 或统一未登录响应 |
| ZCZX-BTJL-API-028 | 权限 | 无写权限 | 接口测试 | Postman | 越权 | 仅 list 权限 | `POST .../subsidyRecord` | 无权限失败 |
| ZCZX-BTJL-API-029 | 响应 | 失败可读 | 接口测试 | Postman | §7 | 已登录 | 触发身份证/区间等错误 | Body 含 `code`、`msg` 且可区分 |
| ZCZX-BTJL-API-030 | 脱敏 | 列表手机号（可选） | 接口测试 | Postman | §3.4 | 普通角色已登录 | `GET list` | `contactPhone` 为脱敏格式（若已实现） |

---

## 三、界面测试用例（UI）

**测试工具**：**Playwright** + **Chromium**（`channel: 'chrome'` 使用本机 **Google Chrome**）。

| 用例编号 | 测试模块 | 测试项 | 测试类型 | 测试工具 | 测试目的 | 前置条件 | 测试步骤 | 预期结果 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ZCZX-BTJL-UI-001 | 列表 | 默认分页排序 | UI 测试 | Playwright+Chrome | §5.2 | 已登录；数据&gt;20 | 进入「补贴发放记录」 | 默认每页 20；发放日期新在前 |
| ZCZX-BTJL-UI-002 | 列表 | 姓名模糊查询 | UI 测试 | Playwright+Chrome | 姓名筛选 | 存在姓名含关键词记录 | 输入姓名→查询 | 表格含该行 |
| ZCZX-BTJL-UI-003 | 列表 | 补贴类型筛选 | UI 测试 | Playwright+Chrome | 精确 | 多类型均有数据 | 选「农业生产」→查询 | 类型列均为农业生产 |
| ZCZX-BTJL-UI-004 | 列表 | 发放日期范围 | UI 测试 | Playwright+Chrome | 闭区间 | 已知样本日期 | 选 start/end→查询 | 仅区间内记录 |
| ZCZX-BTJL-UI-005 | 列表 | 日期区间非法 | UI 测试 | Playwright+Chrome | 异常 | 已登录 | start&gt;end→查询 | 提示错误；列表不刷新或空 |
| ZCZX-BTJL-UI-006 | 列表 | 组合与重置 | UI 测试 | Playwright+Chrome | 恢复 | 已筛选 | 多条件查询→重置 | 条件清空；恢复默认列表 |
| ZCZX-BTJL-UI-007 | 列表 | 操作按钮 | UI 测试 | Playwright+Chrome | §6 | 有数据行 | 检查操作列 | 查看/编辑/删除可见（按权限） |
| ZCZX-BTJL-UI-008 | 新增 | 合法全字段提交 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 新增→填八项必填→确定 | 成功；列表出现新记录 |
| ZCZX-BTJL-UI-009 | 新增 | 项目名空或超长 | UI 测试 | Playwright+Chrome | 1～20 | 已登录 | 项目名空/21 字→提交 | 校验失败 |
| ZCZX-BTJL-UI-010 | 新增 | 姓名超长 | UI 测试 | Playwright+Chrome | 1～10 | 已登录 | 姓名 11 字→提交 | 校验失败 |
| ZCZX-BTJL-UI-011 | 新增 | 身份证/手机非法 | UI 测试 | Playwright+Chrome | 校验 | 已登录 | 填错误身份证或手机号→提交 | 明确错误提示 |
| ZCZX-BTJL-UI-012 | 新增 | 金额与发放日 | UI 测试 | Playwright+Chrome | 异常 | 已登录 | 金额 0 或发放日选明天→提交 | 校验失败 |
| ZCZX-BTJL-UI-013 | 新增 | 类型必选 | UI 测试 | Playwright+Chrome | 约束 | 可清空类型时 | 不选类型→提交 | 必选提示 |
| ZCZX-BTJL-UI-014 | 详情 | 字段完整 | UI 测试 | Playwright+Chrome | §5.5 | 任意记录 | 点「查看」 | 项目、类型、姓名、证件、账户、金额、日期齐全 |
| ZCZX-BTJL-UI-015 | 详情 | 敏感信息脱敏（可选） | UI 测试 | Playwright+Chrome | §5.5 | 普通角色 | 查看详情 | 身份证/手机/账户为脱敏展示（若已实现） |
| ZCZX-BTJL-UI-016 | 修改 | 编辑成功 | UI 测试 | Playwright+Chrome | §5.3 | 有记录 | 编辑→改补贴金额→保存 | 列表/详情已更新 |
| ZCZX-BTJL-UI-017 | 修改 | 保存校验失败 | UI 测试 | Playwright+Chrome | 异常 | 有记录 | 清空银行账户→保存 | 校验失败 |
| ZCZX-BTJL-UI-018 | 删除 | 单条删除确认 | UI 测试 | Playwright+Chrome | §5.4 | 有记录 | 删除→确认 | 记录消失 |
| ZCZX-BTJL-UI-019 | 删除 | 取消删除 | UI 测试 | Playwright+Chrome | 确认框 | 有记录 | 删除→取消 | 记录仍在 |
| ZCZX-BTJL-UI-020 | 删除 | 批量删除（若支持） | UI 测试 | Playwright+Chrome | 批量 | 勾选多条 | 批量删除→确认 | 选中行均消失 |
| ZCZX-BTJL-UI-021 | 类型 | 三类均可登记 | UI 测试 | Playwright+Chrome | §2.1 | 已登录 | 各建类型 1/2/3 一条并筛选 | 筛选与展示正确 |
| ZCZX-BTJL-UI-022 | 端到端 | CRUD 串联 | UI 集成 | Playwright+Chrome | §4 | 可新增 | 新增→查→看→改→删 | 全流程界面无报错 |
| ZCZX-BTJL-UI-023 | 权限 | 只读账号 | UI 测试 | Playwright+Chrome | §8 | 无 add/edit/remove | 登录进模块 | 无新增/编辑/删除或操作拒绝 |
| ZCZX-BTJL-UI-024 | 导出 | 导出按钮（可选） | UI 测试 | Playwright+Chrome | 技术方案 | 有 export 权限 | 点导出 | 下载 Excel 或提示成功 |
| ZCZX-BTJL-UI-025 | 表单 | 金额两位小数 | UI 测试 | Playwright+Chrome | §5.1 | 已登录 | 输入 100.555→提交 | 前端或后端拒绝三位小数 |

---

## Playwright 与谷歌浏览器（实施提示）

- 安装：`npm i -D @playwright/test`；`npx playwright install chromium`；本机 Chrome：`channel: 'chrome'`。  
- 登录复用：`storageState: 'auth.json'`。  
- 路由示例：`page.goto('/policy/subsidyRecord')`（以菜单配置为准）。  
- 日期：`page.locator('.el-date-editor input').first().fill('2025-01-15')` 或项目日期组件封装。  
- 断言：`expect(page.getByText('农业生产')).toBeVisible()`。

---

## 覆盖对照

| 类别 | 单元 UT | 接口 API | 界面 UI |
| --- | --- | --- | --- |
| 正常流程 | UT-010～013 | API-001～008、010～011、020、022、024～026 | UI-001～004、008、014、016、018、021～022 |
| 异常流程 | UT-001～009 | API-009、012～019、021、023、029 | UI-005、009～013、017、019 |
| 业务约束 | UT-003～008、009 | API-003～005、009、015～019 | UI-003、005、011～013、025 |
| 脱敏/权限（可选） | UT-014～016 | API-030、027～028 | UI-015、023、024 |

---

## 功能需求追溯（自查）

| 需求章节 | 要点 | 主要对应用例 |
| --- | --- | --- |
| §5.1 新增 | 八项必填、格式校验 | UT-001～008；API-011～019；UI-008～013 |
| §5.2 列表 | 姓名模糊、类型、日期区间、排序 | UT-009、013；API-001～010；UI-001～006 |
| §5.3 修改 | 全字段可改 | UT-011；API-022～023；UI-016～017 |
| §5.4 删除 | 单条/批量、确认 | UT-012；API-024～025；UI-018～020 |
| §5.5 详情 | 全字段、脱敏 | API-020～021；UI-014～015 |
| §6 操作矩阵 | 无状态限制 | UI-007、023 |
| §7 错误约定 | code/msg | API-029 |

---

## 修订记录

| 版本 | 说明 |
| --- | --- |
| 1.0 | 初版：单元 16、接口 30、UI 25；台账 CRUD 无发布下架；Playwright+Chrome；Base Path `/industryPolicy/subsidyRecord` |
