DEV/Java

DataJpaTest

Beomsu Koh 2023. 7. 11.

@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

댓글