Files
StoreWeb/Tests/Store.Users.Tests
2026-11-06 19:25:36 +08:00
..
2026-10-29 11:34:35 +08:00
2026-10-29 11:34:35 +08:00
2026-10-29 11:34:35 +08:00
2026-10-29 11:34:35 +08:00
2026-10-23 18:16:05 +08:00
2026-10-29 11:34:35 +08:00
2026-10-29 11:34:35 +08:00
2026-10-29 11:34:35 +08:00
2026-10-23 18:16:05 +08:00

User 模块测试

执行

在仓库根目录执行:

dotnet test Tests/Store.Users.Tests/Store.Users.Tests.csproj

按类别运行:

dotnet test Tests/Store.Users.Tests/Store.Users.Tests.csproj --filter FullyQualifiedName~UserFundsTests
dotnet test Tests/Store.Users.Tests/Store.Users.Tests.csproj --filter FullyQualifiedName~UserHttpTests

文件与覆盖范围

文件 用途与关键用例
UserTestContext.cs 每个用例单独建立临时 SQLite 数据库,构造真实 FreeSql 仓储和服务,模拟当前用户及会话注销记录,运行后清理
UserAuthenticationTests.cs 空输入、不存在账号、错误密码、SQL 注入形式输入、明文密码保持不变、哈希随机盐、损坏哈希、修改密码、取消请求
UserManagementTests.cs 认证要求、本人/主子账号/管理员访问范围、无密码输出、账户创建默认值、重名拒绝、分组规则、权限提升拦截、资料更新、计费继承、分页、删除限制
UserFundsTests.cs 积分和余额充值、累计金额、审计字段、重复请求、双账户积分转移、向自己转移、超扣、非管理员调整、非法金额/类型、流水故障回滚及原请求重试
UserRecordTests.cs 账户隔离、操作类型/店铺/订单/时间组合过滤、时间包含边界、分页排序、排除已删除记录、无效日期范围
UserTopUpTests.cs 充值备注身份与可见范围、处理权限、处理备注不自动充值、二维码更新或插入、Data URI、损坏数据、管理员限制
UserHttpTests.cs TestServer 真实 MVC 请求,12 个写入操作拒绝 GET/PUT/DELETE,7 个查询操作拒绝 GET,所有操作采用 POST;未登录 401、JSON 模型验证、有效 POST 创建、认证身份读取、ApiExplorer 与端点方法一致

使用 xUnit,Theory 每组参数分别统计,失败时输出具体测试名称。测试项目已添加到解决方案的 Tests 分组。

隔离与边界

测试不会读取 Store.API/appsettings.json、访问业务 MySQL、调用第三方服务或修改业务数据。每个测试拥有独立数据库,时间过滤采用固定时间,身份通过测试上下文或仅在 TestServer 注册的测试认证方案提供。HTTP 测试接入真实 UnifyResultFilter、GlobalExceptionFilter 及与宿主一致的模型验证响应,验证数据只包装一次,无数据操作、业务异常和参数错误均返回 HTTP 200 的 ApiResult。路由拒绝与测试认证挑战仍保留原始 405/401,此测试宿主未装配全局状态码中间件;测试认证不验证 JWT 签名。

SQLite 能验证数据持久化和异常回滚,但不能替代 MySQL InnoDB 并发行锁、隔离级别和迁移脚本验证。旧版 UserManagementSmoke 和 ShopRenewSmoke 尚未适配当前接口,本轮验证使用上述 xUnit 项目。

User DTO 使用 DataAnnotations 和 IValidatableObject 声明非空、长度、范围、精度和跨字段规则。RequestValidatorTests 验证这些规则;UserServiceValidationTests 确认内部服务调用同样执行验证,HTTP 测试验证模型错误返回 HTTP 200 和 ValidationError。

UserAccessTests 覆盖统一管理范围:管理员跨主账号修改/创建子账号/重置密码,主账号修改本人和直属子账号、重置子账号密码、处理子账号充值备注,非授权账户拒绝操作;普通主账号不能接管管理员账户,也不能充值、扣款或改计费。店铺续费通过真实 MediatR 事务管道测试代操作权限、目标账户扣款与实际操作者审计。HTTP 测试覆盖资料修改与密码重置接口。