본문 바로가기
개발/Spring

[Spring] @DataJpaTest

by 상용최 2021. 3. 14.
반응형

사이드 프로젝트를 시작하려고 했다.

사이드 프로젝트의 목표는 아래 두가지 기술 학습이었다.

  • TDD
  • JPA

TDD를 적용하려고 했는데 Service 객체의 테스트를 어떻게 해야할지 감이 잡히지 않았다.

최대한 가볍게 테스트케이스를 작성하고 싶었다.

@SpringBootTest를 쓴다면 너무 무겁게 되고 @Mock 객체를 사용하자니 실제 DB를 사용하는것과는 환경이 다르다고 생각했다.

 

개인적인 취향으로는 실제 DB 환경과 비슷한 인메모리 DB를 이용하여 테스트 하는것을 좋아한다.

그러다 @DataJpaTest 어노테이션을 알게됐다.

 

@DataJpaTest는 JPA를 다루는데 필요한 Bean만 가져온다.

Mock보다는 무겁겠지만 @SpringBootTest 보다는 가볍다고 생각하여 @DataJpaTest로 진행했다.

 

 

@DataJpaTest는 기본적으로 각 테스트케이스가 끝나면 Rollback한다.

그렇기에 아래와 같은 테스트는 실패한다.

또한 기본적으로 인메모리 DB를 사용한다.

@DataJpaTest
class MemberRepositoryTest {

    @Autowired
    MemberRepository memberRepository;

    @Test
    @DisplayName("data insert")
    public void insert() {
        Member member = new Member("test", "test", "test");

        memberRepository.save(member);
    }

    @Test
    @DisplayName("data select")
    public void select() {
        Member member = new Member("test", "test", "test");

        boolean isPresent = memberRepository.findById(member.getUserId()).isPresent();
        assertTrue(isPresent);
    }
}

 

 

주의할점 : JUnit4 를 사용할 시 @RunWith(SpringRunner.class) 를 함께 적용 해야한다.

 

출처 : docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/orm/jpa/DataJpaTest.html

 

DataJpaTest (Spring Boot 2.4.3 API)

Annotation for a JPA test that focuses only on JPA components. Using this annotation will disable full auto-configuration and instead apply only configuration relevant to JPA tests. By default, tests annotated with @DataJpaTest are transactional and roll b

docs.spring.io

 

반응형

댓글