【发布时间】:2019-06-10 09:06:20
【问题描述】:
测试时@DataJpaTest注解有什么用? 每个数据库连接测试都需要它吗?
即使没有注释,测试也能正常工作
@RunWith(SpringRunner.class)
@DataJpaTest
为什么使用@DataJpaTest 为什么使用它以及何时使用它?
【问题讨论】:
标签: java spring-boot spring-data-jpa
测试时@DataJpaTest注解有什么用? 每个数据库连接测试都需要它吗?
即使没有注释,测试也能正常工作
@RunWith(SpringRunner.class)
@DataJpaTest
为什么使用@DataJpaTest 为什么使用它以及何时使用它?
【问题讨论】:
标签: java spring-boot spring-data-jpa
默认情况下,@DataJpaTest 将配置一个内存嵌入式数据库,扫描@Entity 类并配置 Spring Data JPA 存储库。它也是事务性的并在每个测试结束时回滚。如果我们想禁用事务管理,我们可以使用:
@Transactional(propagation = Propagation.NOT_SUPPORTED)
我们还可以注入一个专门为测试设计的 TestEntityManager bean,它可以替代 JPA EntityManager。
@Autowired
private TestEntityManager entityManager;
因此,我们的测试类应该类似于:
@RunWith(SpringRunner.class)
@DataJpaTest
public class MyJPAUnitTest extends SpringJpaUnitTestApplicationTests {
@Autowired
private TestEntityManager entityManager;
@Autowired
CustomerRepository repository;
@Test
public void testExample() {...}
}
更多详情:https://grokonez.com/testing/datajpatest-with-spring-boot
【讨论】:
使用@DataJpaTest 注解
- 允许您测试域逻辑,以便检查 JPA 映射并检查查询
- 它还配置 Hibernate、Spring Data 和内存数据库。
- 如果您想重用一个真实的数据库,您可以覆盖内存中的数据库。
- 它还提供对 TestEntityManager bean 的访问。这是常规实体管理器的替代方案,仅提供一些 您经常希望在测试中使用的便捷方法
【讨论】: