@SpringJUnitConfig 어노테이션이란?

2022. 4. 26. 01:16CSE/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을 설정하고 이를 자동 주입받을 때, 필수로 필요한 어노테이션이라고 할 수 있다.