@SpringBootTest 와 @Test의 가장 큰 차이는 Bean 관리 주체입니다.
@SpringBootTest는 컴포넌트(Component)로 등록된 빈(Bean)을 관리하는 스프링 컨텍스트(Spring Context)를 로드한 후 테스트를 검증하기 때문에, 스프링이 의존 관계를 연결(DI)할 수 있습니다.
@Test는 이러한 스프링 컨텍스트의 사용 없이, 테스트를 검증하기 때문에, 의존 관계를 연결할 수 없어 개발자가 직접 의존관계가 있는 빈을 연결해줘야 합니다.
@SpringBootTest 어노테이션을 달면, 스프링 컨텍스트를 로드한 후부터 테스트를 검증할 수 있습니다. 그래서 짧은 테스트 코드를 작성하였더라도, 레포지토리(Repository)가 존재한다면 Database까지 모두 정상적으로 연결되어 있는지 확인하는 과정이 필요합니다. 이 때, 테스트에 필요없는 빈까지 모두 스캔하기 때문에 시간이 오래걸립니다.
그럼 무조건 @Test 어노테이션이 좋아보이지 않나요?! 저는 처음에 그랬으나, 무조건이라는 건 없죠..ㅎㅎ
어노테이션의 사용 용도가 다릅니다.
이러한 @SpringBootTest는 컨트롤러, 서비스, 레포지토리와 같은 여러 레이어 간의 통합테스트에서 주로 사용하며, @Test는 하나의 기능을 가진 메서드나 클래스를 테스트하는 단위 테스트 시에 사용합니다.
테스트 코드를 작성하면서 생성자 주입 방식을 선호하게 된 이유를 조금은 알게 되었는데요!
다음에는 DI의 3가지 방식 중 생성자 주입 방식을 선호하게 된 이유를 리플렉션을 사용한 필드 주입 방식과 비교해보도록 하겠습니다!
'프레임워크(Framework) > Spring' 카테고리의 다른 글
[Spring] SpringContext와ApplicationContext는 같은걸까?! (0) | 2024.07.30 |
---|---|
[Spring] DI의 생성자 주입 선호 이유를 테스트 코드에서 찾기(vs 필드 주입) (0) | 2024.07.30 |
[Spring] DTO는 왜 필요할까? (0) | 2024.07.22 |
[Spring] Data Binding의 3가지 방법 (0) | 2024.07.22 |
[Spring] IoC를 실현하기 위한 DI(의존 관계 주입) 방법 3가지 (0) | 2024.07.18 |