SuperAPI AI 工具集

spring-jpa-testing

测试与质量

查看项目

更新于 10-16 02:31

技能介绍

用途:面向 Spring Boot 项目的 JPA 数据层测试,围绕 @DataJpaTest 给出正确写法,避免测试假通过。

主要能力与关键规则:一,用 TestEntityManager 准备测试数据,不要用 Mockito 模拟仓储,@DataJpaTest 已提供真实数据库环境;用 @Autowired TestEntityManager em 配合 em.persist() / em.persistAndFlush() 插入数据,且不要用被测仓储做数据准备,以免仓储缺陷同时掩盖准备与断言错误。二,读取断言前必须调用 em.flush() 再 em.clear():不 flush 时 SQL 可能未到达数据库,不 clear 时仓储会从 Hibernate 一级缓存返回实体,查询实际未对数据库执行。

覆盖信号:@DataJpaTest、JpaRepository、EntityManager、TestEntityManager、@ServiceConnection、PostgreSQLContainer、@AutoConfigureTestDatabase、@Modifying、clearAutomatically、Testcontainers,以及 Hibernate 6/7。

适用场景:派生查询、@Query、分页、规格、投影、审计等仓储测试;测试 @Modifying 批量更新、约束违反、事务回滚与测试隔离;排查懒加载在测试通过但生产失败、N+1、单表继承、只读仓储、@QueryHint 陷阱;Hibernate 6.x/7.x 迁移与 Boot 3.x 到 4.x 测试包导入变化;结合 Testcontainers 与 @ServiceConnection 搭建 @DataJpaTest,或在 @DataJpaTest 与 @SpringBootTest 间做选择。

限制与边界:不适用于测试 REST 控制器或 HTTP 端点(改用 spring-mvc-testing)、认证授权 CSRF JWT OAuth2(改用 spring-security-testing)、响应式仓储 R2DBC 或 WebClient(改用 spring-webflux-testing)、无 Spring 上下文的纯单元测试,以及 AssertJ 断言或 Mockito 桩设置。资料未提供价格、平台与安装命令等信息。