본문 바로가기
Spring

Slice Test

by ilyadelavie 2022. 9. 14.

슬라이스 테스트란?


레이어를 하나의 단위로 보는 단위 테스트로 레이어를 독립적으로 테스트하기 위해 Mockito 라이브러리가 함께 활용되기도 한다.

 

 

슬라이스 테스트를 하는 이유


@SpringBootTest를 이용하면 모든 테스트를 실행할 수 있으나 단점이 몇가지 있다.

  1. 실제 구동되는 애플리케이션의 설정, 모든 Bean을 로드하기 때문에 불필요하게 많은 시간이 소요된다. 
  2. 테스트 단위가 커서 디버깅이 어렵고 빠른 피드백이 어렵다.

위와 같은 이유로 @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