내일배움캠프 34일차 TIL : Spring - Mockito Test(1)

김원기·2024년 6월 18일

TIL

목록 보기
38/42
post-thumbnail

내일배움캠프 34일차 TIL : Spring - Mockito Test(1)

최근에 예비군을 다녀와서 포스팅이 없어졌다...

여튼 바로 들어가서 테스트코드를 작성하는 과정에서 생긴 문제다.

@WebMvcController VS @SpringBootTest

Controller에 대한 테스트 코드를 작성하는 와중에

@WebMvcController 어노테이션을 사용하면 테스트가 작동하지 않고,
@SpringBootTest 어노테이션을 사용하면 테스트가 정상적으로 작동하는데 이 둘의 차이점을 짤막하게 적어볼까 한다.

@WebMvcController

@WebMvcTest는

주 목적은 웹 계층(Web layer) 테스트에 사용하는 것

주로 컨트롤러(@Controller, @RestController)와 관련된 빈들만 로드하므로 슬라이스 테스트(slice test)라고도 한다.

적용 범위는 주어진 컨트롤러(UserController.class와 같이 특정 컨트롤러)와 관련된 빈들만을 로드하며, 다른 빈들은 실제 빈으로 등록되지 않는다.

따라서 서비스 계층이나 데이터 계층과 관련된 빈들은 테스트에 포함되지 않습니다.

그렇기 때문에 사용 시 고려해야 할 점으로

  • 웹 계층의 테스트를 집중적으로 하고자 할 때 유용하며,
  • 컨트롤러의 동작을 검증하는 데 주로 사용됩니다.
  • HTTP 요청/응답 흐름을 시뮬레이션하고 결과를 검증할 수 있습니다.

@SpringBootTest

목적: 전체 애플리케이션 컨텍스트를 로드하여 통합 테스트를 실행.

적용 범위: 애플리케이션의 모든 구성 요소를 실제로 로드하므로, 모든 빈들이 애플리케이션 컨텍스트에 등록된다.

따라서 서비스 계층, 데이터 계층, 웹 계층 등 모든 계층의 빈들이 테스트에 포함된다.

사용 시 고려 사항:

  • 통합적인 테스트를 수행하고 싶을 때, 즉 여러 계층 간의 상호작용을 검증하거나 실제로 애플리케이션을 시작하고 테스트하고자 할 때 사용된다.
  • 실제 데이터베이스나 외부 서비스와의 통합을 포함할 수 있습니다.

차이점 요약

@WebMvcTest: 특정 컨트롤러와 그와 관련된 빈들만 로드하여 웹 계층 테스트를 집중적으로 수행한다.

@SpringBootTest: 전체 애플리케이션 컨텍스트를 로드하여 통합 테스트를 실행하며, 모든 빈들이 실제로 등록된다.

profile
혼자 공부하는 블로그라 부족함이 많아요 https://www.notion.so/18067a27ac7e4f4790dde645fb3bf3d3?pvs=4

0개의 댓글