Backend/Spring+Boot

@RunWith(SpringRunner.class)

findmypiece 2021. 7. 13. 17:00
728x90

SpringBoot 2.1 이전 버전을 사용할 경우 테스트 클래스는 아래와 같이 정의했을 것이다.

@RunWith(SpringRunner.class)
@SpringBootTest
public class Test{
	...
}

 

그런데 SpringBoot 2.1 부터는 @RunWith(SpringRunner.class) 이 없어도 테스트 코드가 잘 동작한다. 그냥 기계적으로 복붙해서 사용했었는데 왜 그런지 궁금해져서 찾아봤다.

 

일단 @RunWith 어노테이션은 테스트 실행방법을 확장할 때 사용하는 어노테이션으로 @RunWith(SpringRunner.class) 라고 정의하면  JUnit4.x 프레임워크가 내장된 Runner를 실행할 때 SpringRunner.class라는 확장된 클래스를 실행하게 된다.

 

SpringRunner.class 에서는 결국 어플리케이션 내에 @SpringBootApplication이 지정된 클래스를 실행하게 되고 우리는 테스트시 스프링 컨테이너를 활용할 수 있게 된다.

 

그런데 SpringBoot 2.1 버전부터는 Junit 버전이 5.x 로 변경되었고 @RunWith 역할을 하는 어노테이션이 @ExtendWith 로 변경되었다. 그리고 해당 어노테이션이 @SpringBootTest 어노테이션에 포함되도록 변경되었기 때문에 우리는 더이상 이를 별도로 정의할 필요가 없는 것이다.

 

추가로 @RunWith(SpringJunit4ClassRunner.class) 이런 것도 있는데 SpringJunit4ClassRunner는 SpringRunner 에서 상속받클래스로 사실상 동일한 클래스라고 봐도 무방하다.

 

728x90

'Backend > Spring+Boot' 카테고리의 다른 글

RestClient 구성시 고려사항  (0) 2021.07.20
UriComponentsBuilder  (0) 2021.07.19
@Async 설정  (0) 2021.07.13
CircuitBreaker, Resilience4j, RestClient  (0) 2021.07.09
ObjectMapper json 직렬화/역직렬화 주의사항  (0) 2021.07.07