基于JUnit 5与Mockito的Spring Boot分层测试要点咨询
Spring Boot 三层单元测试遗漏要点(JUnit 5 + Mockito)
Controller 层
- 请求参数校验:测试带
@Valid/@Validated注解的入参,传入非法值(比如长度超限、格式错误、必填项为空)时,是否返回400 Bad Request及预期的错误提示信息。 - 响应体校验:除了状态码,还要验证返回JSON/XML的字段完整性、字段值正确性,包括嵌套对象、集合的结构和内容是否符合接口定义。
- 全局异常处理:测试ControllerAdvice中定义的全局异常处理器,比如抛出
IllegalArgumentException或自定义业务异常时,是否返回统一格式的错误响应(指定状态码、错误码、提示语)。 - 权限与角色控制:如果集成了Spring Security,测试不同角色(匿名用户、普通用户、管理员)访问端点时,是否返回对应权限的响应(比如无权限返回
403 Forbidden,未登录返回401 Unauthorized)。 - 媒体类型适配:测试端点对不同
Accept请求头的处理,比如指定application/xml时是否返回XML格式,指定不支持的媒体类型时是否返回406 Not Acceptable。 - 分页与排序参数:针对支持分页的接口,测试
page/size参数是否正确返回对应页码的数据,sort/direction参数是否按预期排序结果。
Service 层
- 业务规则校验:覆盖业务逻辑中的各种判断场景,比如余额不足时是否拒绝转账、库存为0时是否禁止下单、用户状态异常时是否无法执行操作等。
- 依赖异常场景:模拟Repository或其他依赖Service抛出异常(比如
DataAccessException、自定义异常),测试当前Service是否正确捕获并处理(比如转换为业务异常、触发事务回滚)。 - 边界值与特殊输入:测试参数的边界情况(比如金额为0、字符串长度刚好达到限制)、空值/空集合/空字符串等特殊输入,验证Service的处理逻辑是否符合预期。
- 事务行为验证:针对标注
@Transactional的方法,测试发生异常时是否触发事务回滚,正常执行时是否正确提交;测试多方法调用时的事务传播行为是否符合配置。 - 缓存逻辑验证:如果使用Spring Cache,测试缓存的命中(重复调用是否直接返回缓存值)、失效(更新数据后缓存是否同步更新)、过期(等待缓存过期后是否重新查询)等场景。
- 并发安全测试:针对涉及共享资源的方法(比如库存扣减、余额更新),用多线程模拟并发调用,验证是否存在线程安全问题(比如超卖、余额计算错误)。
Repository 层
- 自定义查询验证:测试
@Query注解的JPQL/SQL查询,包括复杂条件组合、关联查询、聚合查询(count/sum/avg),验证返回结果是否与预期一致。 - 分页查询准确性:测试分页查询的返回数据条数、总记录数、总页数是否正确,确保分页参数生效。
- 排序逻辑验证:测试按单个字段或多个字段排序的场景,验证结果是否按指定顺序排列(升序/降序)。
- 批量操作测试:测试批量插入、更新、删除方法,验证操作影响的行数是否符合预期,数据是否正确变更。
- 数据库约束校验:测试违反数据库约束的场景(比如唯一键重复、外键关联不存在),验证是否抛出对应的异常(比如
DataIntegrityViolationException)。 - 原生SQL兼容性:如果使用原生SQL查询,测试在目标数据库环境下的执行正确性,避免出现数据库语法差异导致的问题。
内容的提问来源于stack exchange,提问作者Mark Gilson
相关产品推荐
相关产品推荐

