강의를 보며 Test코드를 작성하다가 에러가 떴다.
강사님은 개발 환경이 Junit4 사용중 이었고, 반면 나는 Junit5 이었다.
(Spring Boot 2.2.x 부터는 Junit5이 기본설정)
그렇기에 test파일을 만들때 Junit4을 선택하고
gradle 설정을 Junit4에 맞춰 fix하였다. (Intellij fix 자동 기능 사용)
(이 시점부터 문제가 시작된거 같다..)
문제를 해결하는 과정을 하나의 글로 정리해보았다.
1. Junit4, Junit5는 모듈이 다르기 때문에 import문이 다르다.
@Test 어노테이션을 적고 import할때 두 개의 import문이 떴다.
(Junit4 라이브러리도 갖고 있었기 때문)
-> Junit4 import문 선택
(강의를 보고 코드를 작성하였기 때문에 모든 코드는 Junit4 기준으로 작성함)
코드를 다 작성하고 실행시켜보니 에러를 띄운다.
이유를 정확히 찾지는 못했지만 설정 충돌이 있었던거 같다.
그렇기에 나는 코드를 Junit5 작성방식으로 바꾸었다.
Junit4
import org.junit.Test;
Junit5
import org.junit.jupiter.api.Test;
이와같이 Junit5는 jupiter.api.Test 라이브러리를 참조한다.
Junit5 환경에서 Junit4 참조 라이브러리를 import 하고 있었으니 당연히 오류가 났다.
앞으론 사용에 주의하자 !!
2. @RunWith -> @ExtendWith 변경되었다.
"이제 되나?" 싶었지만 쉽게 놓아주지 않았다.
두번째 에러는 @RunWith 어노테이션이 먹히지 않았다는 것ㅎㅎ,,
Junit5에서도 @RunWith 어노테이션 사용이 가능하지만 굳이...? (설정 바꿔야함)
@RunWith 대신 @ExtendWith 으로 대체 되었는데 기능은 동일하다.
Junit4
@RunWith(SpringRunner.class)
Junit5
@ExtendWith(SpringExtension.class)
3. @SpringBootTest 으로 @ExtendWith 생략 가능하다.
사실 이걸 맨처음 알았다면 좋았을 텐데 말이다...
@ExtendWith 은 '메타어노테이션' 으로 여러번 중복 사용이 가능하다.
스프링 부트가 이를 적극적으로 활용하여
@SpringBootTest 어노테이션은 @ExtendWith 을 포함한다.
그러하여 @SpringBootTest을 사용하면 @ExtendWith을 생략 가능하다.
@SpringBootTest
정리
1. Junit4와 Junit5는 import문이 다르기 때문에 혼용하지 않아야 한다.
2. @RunWith 대신 @ExtendWith을 사용하자.
3. @SpringBootTest를 사용하면 @ExtendWith을 생략 할 수 있다.
'Spring' 카테고리의 다른 글
[Spring] 비동기 처리(Controller) With @Callable (1) | 2023.02.23 |
---|---|
[Spring] Multipartfile, Json 동시에 전송하는 방법 2가지 (3) | 2022.09.11 |
[Spring] Spring Boot 기본 MVC Pattern (0) | 2022.05.23 |
[Spring] @RestController 사용해보기 (0) | 2022.05.19 |
[Spring] Controller 요청방식 정리(@RequestMapping/@GetMapping/@PostMapping) (0) | 2022.05.19 |