2022. 4. 26. 01:16ㆍCSE/Spring
Spring Boot 기반으로 진행하고 있는 프로젝트에서 Test를 진행하다, @SpringJUnitConfig를 붙이느냐 안붙이느냐에 따라 생성자 자동 주입이 되느냐 안되느냐가 결정되는 것을 볼 수 있었다.
물론 이를 통해 당연히 해당 어노테이션은 자동 주입을 해주는구나를 알 수 있지만, 그래도 정확히 확인을 해보았다.
1. Spring Framework 공식문서
Spring Framework 공식 문서에 의하면
@SpringJUnitConfig는 SprintExtension.class의 @ExtendWith와 @ContextConfiguration 이 합쳐진 어노테이션이라고 한다.
따라서 위의 두 어노테이션을 찾아보자.
@ExtendWith : 해당 어노테이션을 통해 하나 이상의 extension을 등록할 수 있다.
@ContextConfiguration : Integration Test에서 application context를 load하고 configure하는 방식을 정의하는 class-level metadata를 정의한다.
2. Baeldung 참고
사실 공식문서로는 잘 이해가 되지 않는다.
그래서 다음 글을 참고하였다.
https://www.baeldung.com/spring-5-junit-config
위의 글에 의하면 다음과 같다.
@ExtendWith : Spring Extension class와 함께 테스트를 실행하기 위함
@ContextConfiguration : Sprint context를 로드하기 위함
이제 좀 더 설명이 깔끔해졌다.
즉, 다음과 같은 코드의 @SpringJUnitConfig 어노테이션이
@SpringJUnitConfig(SpringJUnitConfigIntegrationTest.Config.class)
public class SpringJUnitConfigIntegrationTest {
@Configuration
static class Config {}
}
사실은 다음과 같다는 것이다.
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SpringJUnitConfigTest.Config.class)
3. 결론
즉, 이를 정리하면, Test 클래스에 @Configuration을 달고 @Bean 설정을 해준 뒤, @SpringJUnitConfig 어노테이션을 달아주면 Spring이 @Configuration을 통해 의존관계 설정을 자동으로 해준다는 것을 알 수 있다.
따라서 Test를 진행할 때, Test class 내부에 자체적으로 Configuration을 설정하고 이를 자동 주입받을 때, 필수로 필요한 어노테이션이라고 할 수 있다.
'CSE > Spring' 카테고리의 다른 글
@SpringBootApplication 어노테이션 뜯어보기 (0) | 2022.04.22 |
---|---|
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴 (0) | 2022.01.21 |
Spring과 Spring Boot의 차이점 (0) | 2022.01.19 |
내가 이해한 기본 MVC 패턴 (계속 추가 예정) (0) | 2022.01.18 |
[Spring5입문] DB 연동 (0) | 2021.09.14 |