3.8 KiB
3.8 KiB
单元测试运行结果示例
测试执行命令
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(): 流畅的断言APIassertThatThrownBy(): 异常断言isInstanceOf(): 类型断言hasMessage(): 消息断言
4. 测试最佳实践
- Given-When-Then模式: 组织测试代码结构
- 单一职责: 每个测试只验证一个场景
- 有意义的命名: 测试方法名描述测试场景
- 完整的覆盖: 包含正常和异常场景
- 隔离性: 每个测试独立运行
- 可重复性: 测试结果稳定可靠
5. Mock对象验证技巧
- 验证方法调用次数
- 验证方法参数
- 验证调用顺序
- 验证未调用的方法
运行测试的其他方式
IDE中运行
- IntelliJ IDEA: 右键点击测试类或方法,选择"Run"
- Eclipse: 右键点击测试类,选择"Run As" → "JUnit Test"
运行特定测试
# 运行特定测试类
mvn test -Dtest=UserServiceTest
# 运行特定测试方法
mvn test -Dtest=UserServiceTest#registerUser_Success
# 运行匹配模式的测试
mvn test -Dtest=*ServiceTest
生成测试报告
# 生成HTML格式的测试报告
mvn surefire-report:report
测试报告将生成在 target/site/surefire-report.html