You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:01:39