slice test

Single Ko·2023년 6월 21일
0

공부하며 정리

목록 보기
1/17

슬라이스 테스트란??

Spring Boot 슬라이스 테스트는 테스트를 더 빠르고 쉽게 만들기 위해 사용되는 테스트 전략입니다. 슬라이스 테스트에서는 애플리케이션을 레이어별로 나누고, 각 레이어를 개별적으로 테스트합니다. 이렇게 하면 테스트를 실행하는 데 필요한 시간이 줄어들고, 디버깅이 더 쉬워집니다.

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

@SpringBootTest를 사용하면 모든 테스트를 할 수 있는데 왜 레이어 별로 잘라서 테스트를 하는 것일까?

@SpringBootTest 애노테이션의 단점은 아래와 같다.

  1. 애플리케이션의 설정, 모든 Bean을 스프링 컨테이너에 올리기 때문에 시간이 오래걸리고 무겁다.

  2. 테스트 단위가 크기 때문에 디버깅이 어려운 편이다.

  3. 테스트 코드를 통해 빠른 피드백을 받을 수 있다는 장점이 희석된다.

@SpringBootTest 애노테이션은 통합 테스트를 할 때 사용 하면 될 것이다.

슬라이스 테스트는 애플리케이션의 테스트를 더 빠르고 쉽게 만들 수 있는 유용한 테스트 전략입니다. 슬라이스 테스트를 사용하면 테스트를 실행하는 데 필요한 시간이 줄어들고, 디버깅이 더 쉬워집니다.

슬라이트 테스트를 위한 대표적 애노테이션

스프링 부트는 자동 설정의 일부만을 테스트 슬라이스로 가져와서 테스트에 활용할 수 있도록 다양한 테스트 어노테이션을 제공한다.

아래는 대표적인 슬라이스 테스트 어노테이션이다.

@WebMvcTest
@WebFluxTest
@DataJpaTest
@JsonTest
@RestClientTest

예를 들어, Controller 레이어를 테스트하려면 @WebMvcTest 어노테이션을 사용한다.

이 어노테이션은 Controller 레이어에 필요한 Bean만 등록하고 나머지 Bean은 등록하지 않는다.

슬라이스 테스트에는 Mock 객체를 사용 할 수 있다. Mock 객체는 실제 객체를 대신하여 사용되는 가상의 객체이다(Mock이라는 것의 뜻을 보자). Mock 객체를 사용하면 테스트를 더 쉽게 만들고, 테스트를 더 유연하게 만들 수 있다.

@MockBean

Mock Bean은 기존 Bean의 껍데기만 가져오고 내부 구현은 사용자에게 위임한 형태이다.

즉, 해당 Bean의 어떤 메서드에 어떤 값이 입력되면 어떤 값이 리턴 되어야 한다는 내용 모두 testExample 메서드와 같이 개발자 필요에 의해서 조작이 가능하다.

어떤 로직에 대해 Bean이 예상대로 동작하도록 하고 싶을 때, Mock Bean을 사용하는 것이다.

Mock 사용 시 주의할 점 및 적절한 사용 방법

슬라이스 테스트 시, 하위 레이어는 Mock 기반으로 만들기 때문에 주의할 점들이 있다.

  1. 실제 환경에서는 제대로 동작하지 않을 수 있다.

Mock을 사용한다면 내부 구현도 알아야 하고, 테스트 코드를 작성하며 테스트의 성공을 의도할 수 있기 때문에 완벽한 테스트라 보기 힘들다.
내부 구현이 변경 됐을 때 테스트가 실패하지 않고 통과하게 되면서 혼란이 발생할 수도 있다.
그렇다면 언제 Mock 기반의 테스트를 사용해야 할까?

  1. 랜덤의 성격을 띄고 있는 함수
    LocalDate.now() 처럼 계속 흘러가는 시간의 순간
    외부에 존재하여 내가 제어할 수 없는 외부 서버, 외부 저장소 등 제어할 수 없는 영역
    대규모 어플리케이션(깊은 depth의 레이어)에서 하위 계층들의 테스트 셋업이 방대할 경우

  2. 결론
    모든 Bean들을 사용해야 하는 통합 테스트가 아니라면, 슬라이스 테스트를 시도해보자.
    Mock 기반의 슬라이스 테스트라면 주의하여 엄격하게 사용해야 한다.

profile
공부 정리 블로그

0개의 댓글