@DataJpaTest

HyeonWoo·2020년 12월 12일
0

스프링 & JPA

목록 보기
9/34
post-thumbnail

이번장에서는 @DataJpaTest 어노테이션에 대해서 알아보고자 한다.


@DataJpaTest

  • JPA 관련 테스트 설정만 로드.
  • 데이터소스의 설정이 정상적인지 테스트.
  • JPA를 사용하여 데이터를 제대로 생성, 수정 삭제하는지 등의 테스트.
  • 내장형 데이터베이스를 사용하여 실제 데이터베이스를 사용하지 않고 테스트 데이터 베이스로 테스트할 수 있음.
  • @DataJpaTest는 기본적으로 @Transactional 어노테이션을 포함하고 있어 테스트가 완료되면 자동으로 롤백함.

데이터 소스란?

순수 JDBC로 데이터베이스에 접근을 하면, 데이터베이스에 접근할때마다 커넥션을 맺고 끊는 작업을 한다. 이 커넥션을 맺고 끊는 작업을 줄이기 위해 미리 커넥션을 생성해 두고, 데이터베이스에 접근하고자 하는 사용자에게 미리 생선된 커넥션을 제공하고 돌려받는다. 이 커넥션들을 모아두는 장소를 connection pool이라 한다. connection pool은 경우에 따라 여러개 생성 될 수 있고, 데이터 소스는 coonection pool을 관리하는 목적으로 사용되는 객체이다. 데이터 소스를 이용해 커넥션을 얻어오고 반납하는 등의 작업을 수행한다


@DataJpaTest는 기본적으로 인메모리 임베디드 데이터베이스를 사용하며, @Entity 클래스를 스캔하여 스프링 데이터 JPA 저장소를 구성한다.
만약 최적화한 별도의 데이터소를 사용하여 테스트하고 싶다면 아래처럼 설정하면 된다.

@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replce.NONE)


지금부터 간단한 예제를 통하여 @DataJpaTest를 실행하여 보자.

Book.java

BookRepository.java

JpaRepository를 상속 받는다.

BookJpaTest.java

testEntityManager로 persist() 기능이 정상 동작하는지 테스트.

Book 3개를 저장한후 저장된 Book의 개수가 3개가 맞는지, 저장된 Book에 각 Book객체가 포함되어 있는지 테스트

저장된 Book 중에서 2개가 제대로 삭제되었는지 테스트


참고자료
https://deepweller.tistory.com/6
https://codingnotes.tistory.com/26?category=791316
처음 배우는 스프링부트 2

profile
학습 정리, 자기 개발을 위한 블로그

0개의 댓글