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 |