spring-mock-study/TEST_RESULTS.md

141 lines
3.8 KiB
Markdown

# 单元测试运行结果示例
## 测试执行命令
```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`