슬라이스 테스트란?
레이어를 하나의 단위로 보는 단위 테스트로 레이어를 독립적으로 테스트하기 위해 Mockito 라이브러리가 함께 활용되기도 한다.
슬라이스 테스트를 하는 이유
@SpringBootTest를 이용하면 모든 테스트를 실행할 수 있으나 단점이 몇가지 있다.
- 실제 구동되는 애플리케이션의 설정, 모든 Bean을 로드하기 때문에 불필요하게 많은 시간이 소요된다.
- 테스트 단위가 커서 디버깅이 어렵고 빠른 피드백이 어렵다.
위와 같은 이유로 @SpringBootTest는 통합 테스트에 주로 사용한다. (상황에 따라 슬라이스 테스트에서도 적절히 사용할 수 있다.)
슬라이스 테스트 어노테이션
- @WebMvcTest
- @WebFluxTest
- @DataJpaTest
- @JsonTest
- @RestClientTest
상황에 맞게 위 목록 중 적절한 어노테이션을 사용하면 된다.
@WebMvcTest
@WebMvcTest를 사용하면 웹 레이어 테스트를 하는데 필요한 요소들만 빈으로 등록한다.
- @Controller
- @ControllerAdvice
- @JsonComponent, Converter, GenericConverter, Filter, WebMvcConfigurer, HandlerMethodArgumentResolver 등
이 외 테스트에 필요하지 않은 컴포넌트들은 빈으로 등록하지 않는다.(@Service,@Repository)
사용 예시
@WebMvcTest(MemberController.class) //테스트할 특정 컨트롤러 클래스 명시
public class MemberControllerTest{
@Autowired
private MockMvc mvc; //클라이언트 요청을 테스트할 컨트롤러로 전달하는 역할
@MockBean //컨트롤러에서 사용하는 서비스가 등록되지 않아 @MockBean 사용하여 의존성 대체
private MemberService memberSerive;
//given
@Test
public test01() throws Exception{
given(this.memberService.getName()) //getName() 호출 시
.willReturn(new Member("kim",20)); //지정된 객체 반환
//when then
this.mvc.perform(
get("/members/1")
.accept(MediaType.APPLICATION_JSON)
.andExpect(status.isOk());
);
}
}
Reference
'Spring' 카테고리의 다른 글
Mockito 사용하기 (1) | 2022.09.14 |
---|---|
스프링 DB 접근 기술 개요 (0) | 2022.08.30 |
스프링 테스트 코드 검증(Assertions) (0) | 2022.08.13 |