-
Notifications
You must be signed in to change notification settings - Fork 3
@WebMvcTest와_@SpringBootTest_차이
컨트롤러를 테스트하는것은 유닛테스트라고 할 수 있다. 컨트롤러에 요청을 보내고 요청에 대한 응답이 잘 오는지 확인만하면 되는 테스트이다. 이때 컨트롤러를 테스트하는 방법은 @WebMvcTest를 사용하는 방법과 @SpingBootTest를 사용하는방법이 있다.
@WebMvcTest는 서버에서 컨트롤러만 테스트할 때 사용하는 애노테이션 @SpringBootTest는 클라이언트로부터 상호작용을 확인하는 통합테스트에 적합하다. (Mock객체를 사용할 수 있지만 간단한 컨트롤러 테스트에는 적합하지 않다)
근본적으로 둘의 차이는 얼마나 많은 설정과 컨텍스트를 불러오느냐에 있다. @SpringBootTest는 웹 애플리케이션 컨텍스트와 설정을 모두 불러와 실제 웹 서버에 연결을 시도한다. 이 경우에 테스트를 위해서는 RestTemplate을 이용하면 된다.
반면 @MockMvcTest는 웹애플리케이션 컨텍스트를 초기화 하지만 모든 설정을 불러오는 것이 아니라 MVC레이어와 관련된 설정만 불러온다. HTTP 요청은 mock을 이용해 가짜로 이뤄지고 실제 연결은 생성되지 않는다.
서비스레이어에 대해서 테스트를 통과하면 컨트롤러 테스트가 꼭 필요한가? 에 대해서 의문이 생길 수 있다. MSA 구조에서 여러 팀이 서로 다른 서비스를 관리하기 때문에 API의 변경이 치명적인 장애를 발생시킬 수 있다. 따라서 컨트롤러에 대한 테스트가 중요하다. 컨트롤러에 대한 단위 테스트가 통과되면 비즈니스 로직이 변경되거나 코드를 리팩토링 하더라도 실제 응답에 변화가 생기지 않았음을 보장할 수 있다. (만약 변화가 생겼다면 테스트는 깨지게 되고 변경사항을 다른팀에게 전달하거나 응답에 변화가 생기지 않도록 코드를 새로짜야 한다.)
© 2021 Copyright: SSAFY(SAMSUNG Software Academy For Youth)
@upswp | @daep93 | @gluwein | @junjun0905 | @pertus123