Engineering Note

[Spring Boot] @DataJpaTest 본문

Server/Spring

[Spring Boot] @DataJpaTest

Software Engineer Kim 2025. 7. 10. 12:43

오늘은 JPA를 테스트하는 어노테이션, @DataJpaTest에 대해 정리하려고 한다.


@DataJpaTest

- JPA Reposiotry와 Entity에 대해서 테스트를 해주는 어노테이션이다.

- 이 어노테이션을 사용하면 자동 환경구성을 해주고, 기본적으로 Embbedded in-memory Database를 사용한다. @AutoConfigureTestDatabase를 사용해서 실제 DB 등으로 오버라이딩해서 사용할 수 있다.

- Junit4를 사용하면 JPA만 테스트하더라도 @RunWith(SpringRunner.class) 를 같이 사용해야 한다.


이 어노테이션을 사용하면 실제 DB를 사용하지 않고 정말 비즈니스 로직에 대해 점검 할 수 있다.

세팅 방법

build.gradle

testImplementation 'com.h2database:h2'

 

 

package com.security.auth.repository;

import com.security.auth.entity.User;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.ActiveProfiles;

import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;

@DataJpaTest
class UserRepositoryTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    @DisplayName("이메일로 사용자 조회")
    void findByEmail_shouldReturnUser() {

        // given
        User user = new User();
        user.setEmail("test10@example.com");
        user.setPassword("encodedPassword");
        user.setNickname("testUser");
        userRepository.save(user);

        // when
        Optional<User> result = userRepository.findByEmail("test@example.com");

        // then
        assertThat(result).isPresent();
        assertThat(result.get().getEmail()).isEqualTo("test@example.com");
    }
}



@DataJpaTest는 기본적으로, h2데이터베이스를 사용하기 때문에, h2 데이터베이스에 대한 의존성을 추가하지 않으면 오류가 발생한다.

 



참고 자료 : https://docs.spring.io/spring-boot/api/java/org/springframework/boot/test/autoconfigure/orm/jpa/DataJpaTest.html

Comments