기록

[단위테스트] 해피 케이스와 예외 케이스 본문

교육/강의

[단위테스트] 해피 케이스와 예외 케이스

youngyin 2025. 1. 21. 00:00

1. 해피 케이스와 예외 케이스

테스트를 작성할 때 모든 시나리오를 고려하는 것은 어렵습니다. 그래서 해피 케이스 예외 케이스로 나누어 테스트를 세분화합니다.

  • 해피 케이스(Happy Case):
    • 시스템이 정상적으로 작동할 것으로 기대되는 일반적인 상황.
    • 사용자가 예상대로 행동하고, 입력값이 유효하며, 모든 조건이 만족되는 경우를 테스트.
    • 예: 상품 주문 시, 1개 이상의 상품을 정상적으로 추가하는 경우.
  • 예외 케이스(Exception Case):
    • 시스템이 예상치 못한 입력값이나 동작에 직면했을 때 발생하는 상황.
    • 에러, 경고, 또는 비정상적인 상황에 대한 방어 코드를 확인.
    • 예: 상품을 0개 추가하려고 시도하거나, 잘못된 시간에 주문하는 경우.

필요성:

  1. 해피 케이스는 시스템이 정상적으로 작동함을 보장합니다.
  2. 예외 케이스는 시스템의 안정성과 에러 처리를 보장합니다.

2. 테스트 시 경계값 기준 설정

경계값(Boundary Value)은 입력값의 경계나 시스템의 한계치를 나타냅니다. 예를 들어, 음료 주문 시스템에서:

  • 최소 주문 수량: 1 (해피 케이스)
  • 최대 주문 수량: 제한 없음
  • 예외 상황: 주문 수량이 0 또는 음수

3. 코드 예제: 해피 케이스와 예외 케이스

다음은 음료 주문 시스템에서 해피 케이스 예외 케이스를 테스트하는 코드입니다.

 

(1) 해피 케이스 테스트

@Test
@DisplayName("Happy Case: 정상적으로 음료를 2잔 주문한다")
void addSeveralBeverages() {
    // Arrange
    CafeKiosk cafeKiosk = new CafeKiosk();
    Americano americano = new Americano();

    // Act
    cafeKiosk.add(americano, 2);

    // Assert
    assertThat(cafeKiosk.getBeverages()).hasSize(2); // 2잔이 담겼는지 확인
    assertThat(cafeKiosk.getBeverages().get(0)).isEqualTo(americano); // 첫 번째 음료 검증
    assertThat(cafeKiosk.getBeverages().get(1)).isEqualTo(americano); // 두 번째 음료 검증
}

 

설명:

  • add 메서드가 정상적으로 2개의 음료를 추가했는지 검증합니다.
  • 이는 시스템의 정상 동작을 보장하는 해피 케이스입니다.

(2) 예외 케이스 테스트: 최소값(0)

@Test
@DisplayName("Exception Case: 음료 수량을 0으로 설정 시 예외 발생")
void addZeroBeverages() {
    // Arrange
    CafeKiosk cafeKiosk = new CafeKiosk();
    Americano americano = new Americano();

    // Act & Assert
    assertThatThrownBy(() -> cafeKiosk.add(americano, 0)) // 0잔 추가 시도
        .isInstanceOf(IllegalArgumentException.class) // 예외 클래스 검증
        .hasMessage("음료는 1잔 이상 주문하실 수 있습니다."); // 예외 메시지 검증
}

 

설명:

  • add 메서드에서 주문 수량이 0일 때 예외를 던지는지 검증합니다.
  • 최소값(경계값)에서의 예외 처리를 확인하는 예외 케이스입니다.
Comments