-
[Test] 스프링 부트에서 TestEntityManager를 이용하여 JPA 테스트 하는 방법개발 지식/Test 2023. 11. 28. 23:24
JPA의 영속성 컨텍스트의 1차 캐시, 쓰기 지연 SQL 저장소(IDENTITY 전략 시 사용 안됨), 변경 감지 등의 동작을 확인하고 쿼리가 어떻게 날라가는지를 확인하기 위한 테스트를 하고 싶을 때 스프링 부트에서 테스트 하는 방법(추가적으로 지연 로딩, 즉시 로딩도 테스트하고 싶을 때)
예제 코드
@DataJpaTest public class JpaTest { @Autowired private TestEntityManager em; @Test void test() { Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new Member(); member.setName("A"); member.setTeam(team); em.persist(member); em.flush(); em.clear(); Member findMember = em.find(Member.class, member.getId()); System.out.println(findMember.getTeam().getClass()); //지연로딩일 경우 프록시 객체이다. } }
- @DataJpaTest 내부에 @AutoConfigureDataJpa, @AutoConfigureTestDatabase, @AutoConfigureTestEntityManager 등이 있어서 JPA와 DB 관련 설정이 자동으로 구성되어 TestEntityManager를 자동주입하여 테스트를 진행할 수 있다.
- 따라서 아래와 같이 EntityManagerFactory와 EntityManager를 직접 생성하는 코드는 필요없게 된다.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("name"); EntityManager em = emf.createEntityManager();
- 또한 테스트 코드에서는 자동으로 트랜잭션이 걸리기 때문에 아래와 같은 트랜잭션 코드도 필요없게 된다.
EntityTransaction tx = em.getTransaction(); tx.begin(); tx.commit(); tx.rollback();
'개발 지식 > Test' 카테고리의 다른 글
[Test] Interceptor 적용 후 기존 컨트롤러 테스트 깨짐 (0) 2024.01.10 [Test] 테스트 코드 디버깅 하기 (2) 2023.11.23 [Test] @WebMvcTest 에서 403 에러 해결하기 (0) 2023.11.23