Spring/테스트

Service 테스트 - 예외 발생 방법

초코chip 2024. 3. 12. 13:31

개념

  • 실패 테스트를 진행하다보면, 특정 예외가 잘 잡아지는지 확인할 필요가 있다.
  • 따라서, 예외를 어떻게 발생시키는지 알아야할 필요가 있다.

 

테스트 대상 클래스

예외 처리를 할 때, 테스트 대상 클래스에서만 예외 발생 여부를 확인할 때

//엔티티로만 예외 값 검증을 하는 경우
private void checkPermission(Member member, Product product) {
    if (!(product.isOwner(member) || member.isAdmin())) {
        throw new BusinessException(INSUFFICIENT_PERMISSION);
    }
}

 

확인 방법

테스트 대상 메서드를 호출할 때, 잘못된 값을 전달을 하면 됨

//given
String name = "상품1";
Integer initialPrice = -1; //금액이 마이너스인 경우
String content = "이것은 상품 설명 부분";
String category = Category.BOOK.getKey();
LocalDateTime deadline = LocalDateTime.now().plusDays(3);

 

 

외부(Mock) 클래스

예외 처리를 할 때, 예외 발생 여부가 외부(Mock)에 의해서 결정되는 경우

//외부 biddingRepository 메서드를 통해 예외 발생 여부를 확인
private void checkRelatedBidding(Product product){
    if (biddingRepository.existsByProduct(product)) {
        throw new BusinessException(RELATED_BIDDING_EXISTS);
    }
}

 

확인 방법

외부(Mock) 객체의 행동을 지정할 때, 예외가 발생되었다고 설정하면 됨

when(biddingRepository.existsByProduct(product)).thenReturn(true);