You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
15 KiB
15 KiB
测试指南
**本文档引用的文件** - [pom.xml](file://pom.xml) - [crm-auth/pom.xml](file://crm-auth/pom.xml) - [crm-base/pom.xml](file://crm-base/pom.xml) - [crm-file/pom.xml](file://crm-file/pom.xml) - [AuthServiceImplTest.java](file://crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java) - [AuthUserServiceImplTest.java](file://crm-auth/src/test/java/com/crm/auth/service/impl/AuthUserServiceImplTest.java) - [SysDeptServiceImplTest.java](file://crm-auth/src/test/java/com/crm/auth/service/impl/SysDeptServiceImplTest.java) - [UserListIntegrationTest.java](file://crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java) - [DingTalkAuthClientTest.java](file://crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java) - [ThirdPartyAuthClientFactoryTest.java](file://crm-auth/src/test/java/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.java) - [DataScopeIntegrationTest.java](file://crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java) - [FileApiImplTest.java](file://crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java) - [KkFileViewClientTest.java](file://crm-file/src/test/java/com/crm/file/service/KkFileViewClientTest.java) - [OrphanChunkCleanupTaskTest.java](file://crm-file/src/test/java/com/crm/file/task/Or orphanChunkCleanupTaskTest.java) - [DataVisibilityTest.java](file://crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java)更新摘要
所做更改
- 新增用户列表集成测试章节,详细介绍UserListIntegrationTest的实现与最佳实践
- 更新核心组件部分,增加用户列表功能测试的说明
- 完善详细组件分析,补充用户列表相关的测试策略和断言方法
- 扩展依赖分析,体现用户列表功能的测试覆盖范围
目录
简介
本测试指南面向CRM后端项目的开发与维护人员,系统阐述测试策略、框架选择与落地实践。内容覆盖单元测试、集成测试、端到端测试的实施方法;Mock对象创建、测试数据准备、断言语句编写等高质量用例设计要点;覆盖率要求、持续集成中的测试执行、性能测试与安全测试的实施建议;以及最佳实践与常见问题解决方案,帮助团队保障代码质量与系统稳定性。
项目结构
本项目采用多模块Maven工程组织,测试代码按模块划分在各自src/test目录下:
- crm-auth:认证授权相关服务与控制器,包含丰富的单元测试与集成测试
- crm-base:基础能力与通用安全逻辑,包含数据可见性相关测试
- crm-file:文件上传下载与预览能力,包含服务层与任务类测试
- crm-app:应用启动入口(当前未提供测试)
graph TB
subgraph "根工程"
ROOT["根POM"]
end
subgraph "认证模块 crm-auth"
AUTH_SRC["src/main/java"]
AUTH_TEST["src/test/java"]
AUTH_RES["src/test/resources"]
end
subgraph "基础模块 crm-base"
BASE_SRC["src/main/java"]
BASE_TEST["src/test/java"]
end
subgraph "文件模块 crm-file"
FILE_SRC["src/main/java"]
FILE_TEST["src/test/java"]
end
ROOT --> AUTH_SRC
ROOT --> BASE_SRC
ROOT --> FILE_SRC
AUTH_TEST --> AUTH_SRC
BASE_TEST --> BASE_SRC
FILE_TEST --> FILE_SRC
图表来源
- pom.xml
- crm-auth/pom.xml
- crm-base/pom.xml
- crm-file/pom.xml
章节来源
- pom.xml
- crm-auth/pom.xml
- crm-base/pom.xml
- crm-file/pom.xml
核心组件
- 测试框架与工具
- JUnit 5:统一测试运行器与注解
- Mockito:模拟外部依赖与行为
- Spring Boot Test:上下文加载、Web测试、数据库集成测试支持
- AssertJ:链式断言,提升可读性与表达力
- 分层测试策略
- 单元测试:针对Service实现、工具类、客户端调用进行隔离测试
- 集成测试:结合Spring容器与测试数据库验证跨层交互
- 端到端测试:通过HTTP接口验证完整业务流程(可按需扩展)
- 关键测试样例
- 认证服务单元测试:登录流程、用户信息处理、权限校验
- 第三方认证客户端测试:钉钉等外部接口的Mock与边界条件
- 数据权限范围集成测试:基于注解的数据范围过滤与SQL注入
- 用户列表集成测试:完整的用户查询、分页、过滤与权限控制验证
- 文件服务单元测试:分片上传、会话清理、预览客户端调用
- 基础安全能力测试:数据可见性上下文与工具方法
章节来源
- AuthServiceImplTest.java
- AuthUserServiceImplTest.java
- SysDeptServiceImplTest.java
- UserListIntegrationTest.java
- DingTalkAuthClientTest.java
- ThirdPartyAuthClientFactoryTest.java
- DataScopeIntegrationTest.java
- FileApiImplTest.java
- KkFileViewClientTest.java
- OrphanChunkCleanupTaskTest.java
- DataVisibilityTest.java
架构总览
下图展示认证模块的测试调用链与依赖关系,体现从Controller到Service再到Mapper/外部客户端的分层测试思路。
sequenceDiagram
participant T as "测试用例"
participant C as "认证控制器"
participant S as "认证服务"
participant U as "用户服务"
participant M as "数据访问层"
participant E as "外部客户端"
T->>C : "发起登录请求(模拟)"
C->>S : "调用登录逻辑"
S->>U : "查询并校验用户信息"
U->>M : "持久化查询"
M-->>U : "返回用户实体"
U-->>S : "组装用户DTO"
S->>E : "可选:第三方认证校验"
E-->>S : "返回认证结果"
S-->>C : "返回登录结果"
C-->>T : "响应测试断言"
图表来源
- AuthServiceImplTest.java
- AuthUserServiceImplTest.java
- DingTalkAuthClientTest.java
详细组件分析
认证服务单元测试
- 目标:验证登录流程、用户信息查询、角色权限装配等核心逻辑
- 关键点:
- 使用Mock对象隔离Mapper与外部客户端
- 构造典型与边界输入参数(空值、非法格式、异常场景)
- 使用链式断言验证返回结构与状态码
- 推荐实践:
- 每个用例聚焦单一职责,命名清晰表达意图
- 对异常路径进行显式断言,确保错误分支稳定
- 避免过度Mock业务内部细节,保持测试可维护性
章节来源
- AuthServiceImplTest.java
- AuthUserServiceImplTest.java
部门服务单元测试
- 目标:验证部门树构建、层级关系处理、分页转换等
- 关键点:
- Mock数据访问层返回不同层级结构
- 断言树形结构的父子关系与排序
- 验证分页参数与结果映射正确性
章节来源
- SysDeptServiceImplTest.java
用户列表集成测试
- 目标:验证用户列表功能的完整性和正确性,包括查询、分页、过滤、权限控制等
- 关键点:
- 使用@SpringBootTest加载完整Spring上下文
- 配置测试数据库,准备用户、角色、部门等关联数据
- 模拟不同权限级别的用户,验证数据权限控制
- 验证复杂查询条件组合与分页性能
- 断言返回数据的完整性、准确性与格式规范
- 测试场景覆盖:
- 基础用户列表查询与分页
- 按用户名、邮箱、状态等条件筛选
- 角色权限过滤与数据范围控制
- 部门维度数据隔离
- 异常情况处理与错误响应
- 推荐实践:
- 使用@Transactional保证测试数据隔离
- 采用@Sql或@TestConfiguration初始化测试数据
- 合理拆分测试用例,每个用例验证单一业务场景
- 使用AssertJ进行链式断言,提高可读性
章节来源
- UserListIntegrationTest.java
第三方认证客户端测试
- 目标:验证钉钉等第三方认证客户端的调用与异常处理
- 关键点:
- Mock网络请求或HTTP客户端,模拟成功与失败响应
- 断言重试机制、超时与错误码处理
- 验证Token获取与缓存逻辑
章节来源
- DingTalkAuthClientTest.java
- ThirdPartyAuthClientFactoryTest.java
数据权限范围集成测试
- 目标:验证基于注解的数据范围过滤与SQL注入是否正确生效
- 关键点:
- 使用测试数据库与事务回滚保证数据隔离
- 构造不同用户与部门上下文,断言查询结果集
- 检查生成的SQL是否包含正确的数据范围条件
章节来源
- DataScopeIntegrationTest.java
文件服务单元测试
- 目标:验证分片上传、会话管理、预览客户端调用与清理任务
- 关键点:
- Mock存储与预览服务,模拟大文件与异常场景
- 断言会话生命周期与过期清理逻辑
- 验证并发上传时的幂等性与一致性
章节来源
- FileApiImplTest.java
- KkFileViewClientTest.java
- OrphanChunkCleanupTaskTest.java
基础安全能力测试
- 目标:验证数据可见性上下文与工具方法的正确性
- 关键点:
- 设置不同可见性级别,断言工具方法输出
- 验证上下文切换与线程隔离
章节来源
- DataVisibilityTest.java
依赖分析
各模块测试依赖关系如下,便于理解测试范围与隔离策略。
graph LR
AUTH_TEST["crm-auth 测试"] --> AUTH_MAIN["crm-auth 主代码"]
AUTH_TEST --> BASE_MAIN["crm-base 主代码"]
FILE_TEST["crm-file 测试"] --> FILE_MAIN["crm-file 主代码"]
FILE_TEST --> BASE_MAIN
BASE_TEST["crm-base 测试"] --> BASE_MAIN
图表来源
- crm-auth/pom.xml
- crm-file/pom.xml
- crm-base/pom.xml
章节来源
- crm-auth/pom.xml
- crm-file/pom.xml
- crm-base/pom.xml
性能考虑
- 单元测试性能
- 控制Mock与内存对象数量,避免不必要的复杂对象构造
- 使用并行执行时注意线程安全与共享资源隔离
- 集成测试性能
- 使用嵌入式数据库或轻量级测试库,减少IO开销
- 合理拆分测试套件,避免全量加载大型上下文
- 用户列表集成测试应关注大数据量场景下的查询性能
- 性能测试建议
- 引入压测工具(如JMeter、Gatling)对关键接口进行基准测试
- 关注慢查询与锁竞争,结合监控指标定位瓶颈
- 对用户列表等高频接口进行专门的性能测试
[本节为通用指导,不直接分析具体文件]
故障排查指南
- 常见测试问题
- 上下文加载失败:检查测试配置与依赖注入是否正确
- Mock行为未生效:确认@MockBean或Mockito.when()调用时机
- 数据库事务未回滚:确保使用@Transactional或测试后手动清理
- 并发测试不稳定:避免共享状态,增加等待与重试机制
- 集成测试数据污染:确保测试数据隔离与清理机制
- 调试技巧
- 打印关键变量与中间结果,缩小问题范围
- 使用IDE断点与日志级别调整定位异常
- 将失败用例最小化复现,便于快速修复
- 对于用户列表测试,重点关注SQL生成与权限过滤逻辑
章节来源
- DataScopeIntegrationTest.java
- OrphanChunkCleanupTaskTest.java
- UserListIntegrationTest.java
结论
通过分层测试策略与规范的用例设计,本项目在认证、文件与安全等核心能力上建立了可靠的测试保障。新增的用户列表集成测试进一步完善了用户管理功能的测试覆盖,确保了复杂业务场景下的功能正确性。建议持续完善覆盖率指标、引入自动化CI流水线与性能/安全测试,进一步提升交付质量与系统稳定性。
[本节为总结性内容,不直接分析具体文件]
附录
- 测试覆盖率要求
- 行覆盖率≥80%,分支覆盖率≥70%
- 关键业务模块(认证、权限、文件、用户管理)覆盖率≥90%
- 持续集成中的测试执行
- 在CI中并行执行单元测试与集成测试
- 生成覆盖率报告并设置阈值门禁
- 用户列表集成测试应在CI中专门执行,确保数据权限逻辑正确
- 安全测试实施
- 引入静态扫描与依赖漏洞检测
- 对敏感接口进行渗透测试与越权验证
- 重点验证用户列表的数据权限控制与越权访问防护
- 最佳实践清单
- 用例命名清晰,描述预期行为
- 优先断言结果而非实现细节
- 保持测试数据独立与可重复
- 定期清理过时用例与冗余Mock
- 集成测试应覆盖主要业务场景与边界条件
[本节为通用指导,不直接分析具体文件]