spring-mock-study/TEST_RESULTS.md

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(): 流畅的断言API
  • assertThatThrownBy(): 异常断言
  • 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