# 单元测试运行结果示例 ## 测试执行命令 ```bash mvn test ``` ## 测试结果概览 ``` [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running com.example.usertest.service.UserServiceTest [INFO] Tests run: 32, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.892 s - in com.example.usertest.service.UserServiceTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 32, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ``` ## 详细测试报告 ### 用户注册测试 (11个测试) ✅ 成功注册新用户 ✅ 用户名已存在时注册失败 ✅ 邮箱已存在时注册失败 ✅ 空请求注册失败 ✅ 用户名为空时注册失败 ✅ 用户名太短时注册失败 ✅ 用户名包含非法字符时注册失败 ✅ 密码太短时注册失败 ✅ 密码没有数字时注册失败 ✅ 密码没有字母时注册失败 ✅ 邮箱格式无效时注册失败 ### 用户登录测试 (7个测试) ✅ 成功登录 ✅ 用户不存在时登录失败 ✅ 用户未激活时登录失败 ✅ 密码错误时登录失败 ✅ 空请求登录失败 ✅ 用户名为空时登录失败 ✅ 密码为空时登录失败 ### 修改密码测试 (6个测试) ✅ 成功修改密码 ✅ 用户不存在时修改密码失败 ✅ 旧密码错误时修改失败 ✅ 新旧密码相同时修改失败 ✅ 空请求修改密码失败 ✅ 新密码格式无效时修改失败 ### 删除用户测试 (3个测试) ✅ 成功删除用户(软删除) ✅ 用户不存在时删除失败 ✅ 无效的用户ID时删除失败 ### 获取用户测试 (2个测试) ✅ 成功获取用户 ✅ 用户不存在时获取失败 ### 边界条件测试 (2个测试) ✅ 用户名长度边界测试 ✅ 密码长度边界测试 ### Mock验证测试 (3个测试) ✅ 验证方法调用次数 ✅ 验证方法从未被调用 ✅ 验证方法调用顺序 ## 测试覆盖率 - 类覆盖率: 100% - 方法覆盖率: 100% - 行覆盖率: 95% - 分支覆盖率: 90% ## 关键知识点总结 ### 1. JUnit 5 注解 - `@Test`: 标记测试方法 - `@BeforeEach`: 每个测试方法执行前运行 - `@Nested`: 组织相关的测试用例 - `@DisplayName`: 为测试提供可读的名称 - `@ExtendWith`: 扩展测试功能 ### 2. Mockito 使用 - `@Mock`: 创建模拟对象 - `@InjectMocks`: 注入模拟对象到被测试类 - `when().thenReturn()`: 定义模拟行为 - `verify()`: 验证方法调用 - `ArgumentCaptor`: 捕获方法参数 ### 3. AssertJ 断言 - `assertThat()`: 流畅的断言API - `assertThatThrownBy()`: 异常断言 - `isInstanceOf()`: 类型断言 - `hasMessage()`: 消息断言 ### 4. 测试最佳实践 - **Given-When-Then模式**: 组织测试代码结构 - **单一职责**: 每个测试只验证一个场景 - **有意义的命名**: 测试方法名描述测试场景 - **完整的覆盖**: 包含正常和异常场景 - **隔离性**: 每个测试独立运行 - **可重复性**: 测试结果稳定可靠 ### 5. Mock对象验证技巧 - 验证方法调用次数 - 验证方法参数 - 验证调用顺序 - 验证未调用的方法 ## 运行测试的其他方式 ### IDE中运行 - IntelliJ IDEA: 右键点击测试类或方法,选择"Run" - Eclipse: 右键点击测试类,选择"Run As" → "JUnit Test" ### 运行特定测试 ```bash # 运行特定测试类 mvn test -Dtest=UserServiceTest # 运行特定测试方法 mvn test -Dtest=UserServiceTest#registerUser_Success # 运行匹配模式的测试 mvn test -Dtest=*ServiceTest ``` ### 生成测试报告 ```bash # 生成HTML格式的测试报告 mvn surefire-report:report ``` 测试报告将生成在 `target/site/surefire-report.html`