이 책을 참조해 최신 개발 환경(2022년도 기준) 에서 진행하였습니다.
- Spring Boot 2.6.5
- gradle 7.1.1
- Java 11
이번 장에서는 HelloController 를 만들어 테스트 코드를 작성하는 연습을 했다. jUnit5 사용해서 이에 맞는 코드의 최신화가 필요했다.
- @ExtendWith
- 확장을 선언적으로 등록해 주는 역할을 한다. Extendtion 뒤에 인자로 확장할 Extension을 추가하여 사용 할 수 있다.
-Spring을 사용할 경우 @ExtendWith(SpringExtension.class)와 같이 사용한다.- @WebMvcTest
- Web(Spring MVC)를 위한 테스트이다.
- @Controller, @ControllerAdvice 등을 사용 할수 있다. 따라서 테스팅이 비교적 가볍다.
- 주의 할 점은 @Service, @Component, @Repository 등은 사용할 수 없다.
- 이번 테스트는 단순하게 HelloController 만을 테스트 하는 것이므로 사용했다.
- @Autowired
- 스프링이 관리하는 빈(Bean)을 주입 받는다.- private MockMvc mvc
- 웹 API를 테스트 할 때 사용한다.
- 스프링 MVC 테스트의 시작점이다.
- HTTP GET, POST 등에 대한 API 테스트를 할 수 있다.
@ExtendWith(SpringExtension.class)
@WebMvcTest
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
...이하 책이나 깃허브를 참조해 주세요...
}
@WebMvcTest 와 @SpringBootTest 같이 사용할 수 없다. 만약 같이 사용하고자 한다면 이런 에러를 만날 것이다..
Test ignored.
java.lang.IllegalStateException: Configuration error: found multiple declarations of @BootstrapWith for test class
이유는 에러 메시지처럼 @WebMvcTest 와 @SpringBootTest 모두 @BootstrapWith 를 포함하기때문에 중첩되는 문제가 발생하는 것이다.
사실상 이 테스트에서는 Controller 만 테스트 하는 것이라 @SpringBootTest 를 쓸 일이 없는데 나는 중간에 내 실수때문에 다른 이슈를 만났고 이를 해결하고자 사용하려했지만 실패했다. 이에 대해선 다음 글을 참조하면 된다.
[ jUnit5 ] java.lang.AssertionError: Status expected:<200> but was:<406> 에러
Spring MVC 테스트 | Spring 통합테스트 |
---|---|
@ExtendWith(SpringExtension.class) | @SpringBootTest |
@WebMvcTest |
참조 및 인용
[Spring 프로젝트] Junit5 테스트 코드 작성하기 (Junit4와 차이점 정리)