TIL: 2024/06/13 - 테스트 도구

White 와잇·2024년 6월 13일

TIL

목록 보기
37/40
post-thumbnail

Springboot 환경에서 테스트 코드를 효율적으로 작성하고 관리하는 방법과 도구를 사용해보기


단위테스트

  • 메서드 혹은 기능의 최소 단위 별로 테스트 (보통 하나의 메서드로 구분) 하되,
    하나의 메서드 내에서도 여러 에지 케이스(Edge-case)가 있다면 케이스별로 각각 테스트 코드를 나눠서 작성하기!
  • 테스트 코드 작성 도구: JUnit, Mockito.
  • 스프링부트라면 따로 의존성 추가할 필요 없음
  • Spring이 동작하지 않는다!

Mockito

JUnit을 사용한 테스트 코드 작성 중에 Service 로직을 테스트해 본다고 가정할 때,
실제 로직 코드에서는 Repository Bean을 주입받아 사용했는데
테스트 코드에서 Spring이 동작하지 않는데 어떻게 Repository 의존성을 처리해야하는가?

목적은 '단위테스트' 이기 때문에 분리되어있는 다른 클래스는 실체화하지 않고
가짜 객체(Mock Object)를 선언한다. 실제 인스턴스화 하지 않으며 만들어져있다고 '가정'만 하는 것.
예시) @Mock ProductRepository productRepository;

  • 가짜 객체 선언에 @Mock 어노테이션을 명시

실제 인스턴스화 하지 않아서 따라오는 문제점이 있는데
예를들면 productRepository에서 어떤 상품을 찾는 로직이라면 가짜이기 때문에 값을 가져올 수 없다.

이 때는 리턴될(내가 나오길 기대하는, 예상되는) 그 상품 객체product를 직접 만들어두고 given(testMethod()).willReturn(expectedProduct); 으로 테스트가 되는지 확인할 수 있다.
정답을 미리 만들어놓는 느낌이다.

예시) given(productRepository.findById(productId)).willReturn(Optional.of(product));

통합테스트

  • 모듈 간의 연결, 상호 작용을 테스트 가능
  • @SpringBootTest 애너테이션을 사용하여 Spring이 동작하도록 함
  • 여러 테스트 메서드에 순서를 지정할 수 있음 @Order(n) (n은 정수)
    @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 테스트 클래스에 추가
  • Spring의 Bean 주입이 동작하는 환경에서는 가짜 객체 선언을 @Mock대신 @MockBean을 사용

참고

profile
웹개발 도전! 데브옵스 도전!

0개의 댓글