Spring 테스트 클래스 어노테이션으로 @RunWith(SpringRunner.class) 또는 @ExtendWith(SpringExtension.class) 을 사용합니다. (required = 필수이기때문에)
우선 이 두가지 어노테이션의 공통점을 보면
두 어노테이션 모두 스프링 부트 테스트 기능과 Junit의 브릿지 역할을 한다는 것.
그래서 Junit에서 스프링 부트 테스트 기능을 사용할 때 반드시 추가해주어야 합니다.
그리고 이 두가지 어노테이션의 차이점은...?
@RunWith 는 Junit 4 에서 사용하고,
@ExtendWith 는 Junit 5 (Jupiter)에 적용이 됩니다.
"아래는 Junit 5 (jupiter)를 gradle.build 파일에 사용하는 모습."
***클린 코드를 위한 포인트 w/ Junit5 (jupiter)
테스트 클래스 작성시 더욱 클린한 코드를 작성하는 10초 짜리 포인트가 있습니다.
우측에 HelloControllerTest를 보자면, Spring Boot + Junit 5 (jupiter) 환경에서 작성한 테스트 클래스입니다.
지금까지 (아주 짧게) 설명드린 @ExtendWith 어노테이션 하단에 @WebMvcTest(HelloController.class)가 있습니다.
(@WebMvcTest에 대해서는 언젠가 포스팅을 할 기회가 오지 않을까 싶군요.)
추적하고 들어가 보시죠.
우측에 사진과 같이 @WebMvcTest 어노테이션은 이미 @ExtendWith(SpringExtension.class) 를 상속받아 사용하고 있습니다.
그렇다면 아래 라인은 불필요한 라인이 되므로 지워주도록 하겠습니다.
(설명을 위해 저는 주석처리만 해놓고 테스트를 HelloControllerTest 클래스를 테스트해보겠습니다.)
@ExtendWith(SpringExtension.class)
보면 @ExtendWith 를 제외한 것과 제외하지 않은 경우 모두 테스트가 잘 실행되는것을 확인 할 수 있습니다.
그렇다면 @WebMvcTest 외에 @ExtendWith를 활용하는 어노테이션은 무엇이 있을까요?
저의 미약한 구글링 솜씨로 인해 intellij 에서 직접 검색 해보았습니다.
상당히 많군요.
@RestClientText, @WebSErviceClientTest @DataJpaTest 등 상당히 많은 테스트 클래스들에도 이미 적용이 된것으로 보이네요.
스프링부트 테스트 샘플 코드를 찾다보면 아래처럼 어노테이션을 추가된 경우가 상당히 많습니다.
@ExtendWith(SpringExtension.class)
@WebMvcTest(HellController.class)
public class HelloControllerTest {
혹시 제 글을 읽게 되시는 분이 계시다면 다른 샘플 코드들 보다 한줄 덜, 그래서 더 클린한 코드를 작성하시길 바랍니다.
더 유익한 정보를 공유할 힘을 키울 수 있게 좋아요와 구독 대신 댓글만 이라도 달아주세요!
감사합니다.
'Spring' 카테고리의 다른 글
How to handle Spring WebClient Exception. 스프링 에러 핸들링. Pt. 1 (0) | 2021.09.16 |
---|---|
Spring Validation에 대하여 알아보자 (0) | 2021.09.13 |
Spring & SpringBoot 짧고 굵게 짚고가기 (0) | 2021.09.12 |