@SpringBootTest vs @DataJpaTest

Haechan Kim·2024년 2월 19일
0

Spring

목록 보기
60/69

@SpringBootTest

  • AppliationContext에 모든 Bean 등록.
  • 스프링부트 어플리케이션 실행했을 때와 동일하게 컨테이너에 Bean 등록.
    • @configuration 통해 수동 등록한 Bean +
    • 컴포넌트 스캔 통해 @Component 달려있는 모든 Bean 다 등록.

@DataJpaTest

  • 오직 JPA 컴포넌트 테스트 위한 어노테이션

  • AppliationContext에 JPA에 필요한 설정만 등록.

    • AppliationContext : BeanFactory 상속받아 구현, BEanFactory가 감당하는 Bean 생성, 제어, 관리.
    • 스프링 IOC 컨테이너의 역할을 함.
  • 따로 지정하지 않으면 in-memory embedded db 사용.

  • Component Scan 하지 않음! 컨테이너에 @Component Bean 등록 X

    • 컴포넌트 스캔 : @Component를 가진 모든 대상을 가져와서 Bean에 등록하기 위해 찾는 과정
    • @Service, @Controller, @Repository 모두 @Component 상속받고 있음.

비교

@Component 어노테이션 붙은 클래스 사용해야 한다면 @SpringBootTest 활용.
컨트롤러, 서비스 테스트 등.

@DataJpaTest 가 당연히 더 빠름. (@Component Bean 등록하지 않기 때문에)
@Conponent Bean 활용하지 않는 경우. 리파지토리, 일반 비지니스 로직 등.

모든 Bean을 다 등록하는 @SpringBootTest는 단위테스트에서 사용하지 않는 것이 좋다!
통합 테스트와 단위 테스트의 목적을 구분해 사용하자.
Mockito를 사용하자.

0개의 댓글