【问题标题】:DataJpaTest annotation usage[Spring-boot]DataJpaTest注解使用[Spring-boot]
【发布时间】:2019-06-10 09:06:20
【问题描述】:

测试时@DataJpaTest注解有什么用? 每个数据库连接测试都需要它吗?

即使没有注释,测试也能正常工作

 @RunWith(SpringRunner.class) 
 @DataJpaTest

为什么使用@DataJpaTest 为什么使用它以及何时使用它?

【问题讨论】:

    标签: java spring-boot spring-data-jpa


    【解决方案1】:

    默认情况下,@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

    【讨论】:

      【解决方案2】:

      使用@DataJpaTest 注解

      1. 允许您测试域逻辑,以便检查 JPA 映射并检查查询
      2. 它还配置 Hibernate、Spring Data 和内存数据库。
      3. 如果您想重用一个真实的数据库,您可以覆盖内存中的数据库。
      4. 它还提供对 TestEntityManager bean 的访问。这是常规实体管理器的替代方案,仅提供一些 您经常希望在测试中使用的便捷方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-12
        • 2019-07-05
        • 1970-01-01
        • 2019-03-28
        • 2019-09-27
        • 2015-11-17
        • 1970-01-01
        • 2020-02-03
        相关资源
        最近更新 更多