@SpringBootTest : 통합테스트
Spring Boot 애플리케이션을 실행할 때 Spring 컨테이너를 시작하는 방법과 동일하게 전체 애플리케이션 컨텍스트를 로드한다. 컨트롤러를 통해 실제 응답값을 확인하고 싶으면 통합테스트를 진행해야한다.
@WebMvcTest : 단위테스트
단위테스트란?
소프트웨어의 개별 구성 요소를 검증하기 위한 테스트, 개별 구성 요소의 동작을 분리된 환경에서 테스트하는 것을 목표로한다.
@WebMvcTest는 주로 웹 컨트롤러와 관련된 부분을 테스트 하는데 사용한다. 때문에 @WebMvcTest로 테스트하는 것은 웹 계층의 단위 테스트(Unit Test)에 해당한다. 이 애노테이션을 사용하면 특정 컨트롤러와 관련된 로직을 격리된 환경에서 테스트할 수 있다.
격리된 환경?
테스트가 외부 요소(데이터베이스)나 서비스로부터 독립적으로 실행되는 환경을 의미한다.
→ 테스트를 의존성 없이 실행할 수 있게 해준다.
따라서@WebMvcTest는 실제 서비스를 호출하거나 외부 데이터베이스 액세스하지 않는다.
격리된 환경을 구현하기 위해 테스트더미, 가짜 객체, mock, 메모리 내 데이터베이스, 테스트 전용 데이터베이스 등을 이용할 수 있다.
전체 컨텍스트를 로드하는 @SpringBootTest와 달리, @WebMvcTest는 요청/응답 처리를 위한 보안, 필터, 인터셉터 등을 포함하는 웹 레이어만 로드한다. 일반적으로 @Controller 또는 @RestController 아래에 메서드에 대한 테스트를 작성한다.의존 관계에 있는 다른 레이어를 사용할 때(예를들어, 리포지토리)는 Mock를 이용해야한다.
@DataJpaTest
JPA에 대한 구성만 로드합니다. (별도로 지정하지 않으면 임베디드 인메모리 h2를 사용)
'spring' 카테고리의 다른 글
ReflectionTestUtils로 더미데이터 DB에 넣기 (0) | 2023.10.25 |
---|---|
Spring MVC 단위 테스트 (0) | 2023.10.24 |
메소드 인자에서 @NotNull 과 @NonNull (0) | 2021.12.24 |
[Lombok] 올바른 Lombok 사용법 - @Builder (0) | 2021.12.05 |
JPA (2) 엔티티 생명주기, 영속성 컨텍스트 (0) | 2021.09.18 |