@DataJpaTest
- Spring Boot에서 제공하는 JPA 테스트 유틸리티
- [[Repository]] 주입 및 스캔 등 테스트 보조
이 어노테이션은 Spring Boot에서 제공하는 테스트 유틸리티 중 하나로, JPA 관련 컴포넌트를 테스트하는 데 사용됩니다.
1단계: 임베디드 데이터베이스 사용
@DataJpaTest
를 사용하면 테스트를 위한 임베디드 데이터베이스를 메모리에 올립니다.
기본적으로 H2 데이터베이스가 사용되며, 각각의 테스트마다 독립적인 데이터베이스가 생성됩니다.
이를 통해 실제 데이터베이스를 사용하지 않고도 데이터베이스와 상호작용하는 코드를 테스트할 수 있습니다.
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
// 테스트 코드 작성
}
2단계: JPA 설정
@DataJpaTest
는 JPA와 관련된 설정을 자동으로 구성합니다.
이를 통해 JPA 엔티티와 리포지토리를 사용하는 테스트를 실행할 수 있습니다.
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testSaveUser() {
User user = new User();
user.setName("John Doe");
user.setEmail("john.doe@example.com");
userRepository.save(user);
// 검증 코드 작성
}
}
3단계: 스프링 데이터 JPA 리포지토리 스캔
@DataJpaTest
는 스프링 데이터 JPA 리포지토리를 스캔하여 테스트할 수 있는 환경을 제공합니다.
따라서 JPA 엔티티와 리포지토리를 사용하는 코드를 테스트할 수 있습니다.
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testFindUserByEmail() {
User user = userRepository.findByEmail("john.doe@example.com");
// 검증 코드 작성
}
}
4단계: 트랜잭션 관리
@DataJpaTest
는 각각의 테스트 메소드를 실행할 때 트랜잭션을 자동으로 시작하고, 테스트가 완료되면 롤백합니다.
이를 통해 테스트 간의 데이터 상태를 격리시켜 각각의 테스트가 독립적으로 실행될 수 있습니다.
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@Test
public void testUpdateUser() {
User user = userRepository.findById(1L).orElse(null);
user.setName("Jane Doe");
userRepository.save(user);
// 롤백 후에는 변경 사항이 데이터베이스에 반영되지 않음
}
}
5단계: 기타 지원 기능
@DataJpaTest
는 JPA 관련 기능을 위해 추가적인 기능들을 제공합니다.
예를 들어, TestEntityManager
를 사용하여 엔티티를 테스트용 데이터베이스에 쉽게 저장하고 조회할 수 있습니다.
@DataJpaTest
public class UserRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Test
public void testSaveUser() {
User user = new User();
user.setName("John Doe");
user.setEmail("john.doe@example.com");
entityManager.persist(user);
// 검증 코드 작성
}
}
이렇게 @DataJpaTest
를 사용하면 JPA 엔티티와 리포지토리를 테스트하는 데 필요한 설정과 기능을 쉽게 사용할 수 있습니다.
이를 통해 데이터베이스와 상호작용하는 코드의 테스트를 더 쉽고 효율적으로 수행할 수 있습니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
Persist Context (0) | 2023.07.11 |
---|---|
JPA (0) | 2023.07.11 |
@ToString (0) | 2023.07.10 |
@Component (0) | 2023.07.10 |
SQL 조인에 대한 이해 - Outer Join과 Inner Join (0) | 2023.07.07 |