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

y001·2025년 1월 19일
post-thumbnail

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

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

  • 해피 케이스(Happy Case):

    • 시스템이 정상적으로 작동할 것으로 기대되는 일반적인 상황.
    • 사용자가 예상대로 행동하고, 입력값이 유효하며, 모든 조건이 만족되는 경우를 테스트.
    • 예: 주차 시스템에서 차량이 정상적으로 입차하는 경우.
  • 예외 케이스(Exception Case):

    • 시스템이 예상치 못한 입력값이나 동작에 직면했을 때 발생하는 상황.
    • 에러, 경고, 또는 비정상적인 상황에 대한 방어 코드를 확인.
    • 예: 동일한 차량이 두 번 입차를 시도하거나, 주차장이 가득 찬 경우.

필요성:

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

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

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

  • 최소 주차 공간: 1대 (해피 케이스)
  • 최대 주차 공간: 100대 (시스템 최대 수용 가능 수)
  • 예외 상황: 주차 공간이 0이거나, 주차장이 이미 가득 찬 경우

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

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

(1) 해피 케이스 테스트

@Test
@DisplayName("Happy Case: 정상적으로 차량을 주차한다")
void parkVehicleSuccessfully() {
    // Arrange
    ParkingLotSystem parkingLotSystem = new ParkingLotSystem();
    Vehicle vehicle = new Vehicle("XYZ-5678");

    // Act
    parkingLotSystem.parkVehicle(vehicle);

    // Assert
    assertThat(parkingLotSystem.getVehicles()).hasSize(1); // 차량 1대가 주차되었는지 확인
    assertThat(parkingLotSystem.getVehicles().get(0)).isEqualTo(vehicle); // 차량 정보 검증
}

설명:

  • parkVehicle 메서드가 정상적으로 차량을 주차하는지 검증합니다.
  • 이는 시스템의 정상 동작을 보장하는 해피 케이스입니다.

(2) 예외 케이스 테스트: 주차 공간 초과

@Test
@DisplayName("Exception Case: 주차장이 가득 찬 경우 예외 발생")
void parkVehicleWhenLotIsFull() {
    // Arrange
    ParkingLotSystem parkingLotSystem = new ParkingLotSystem(1); // 최대 1대 주차 가능
    Vehicle vehicle1 = new Vehicle("ABC-1234");
    Vehicle vehicle2 = new Vehicle("DEF-5678");

    parkingLotSystem.parkVehicle(vehicle1); // 첫 번째 차량 주차

    // Act & Assert
    assertThatThrownBy(() -> parkingLotSystem.parkVehicle(vehicle2)) // 두 번째 차량 주차 시도
        .isInstanceOf(IllegalStateException.class) // 예외 클래스 검증
        .hasMessage("주차장이 가득 찼습니다."); // 예외 메시지 검증
}

설명:

  • parkVehicle 메서드에서 주차장이 가득 찼을 때 예외를 던지는지 검증합니다.
  • 최대 수용량(경계값)에서의 예외 처리를 확인하는 예외 케이스입니다.

📌 이 글은 TDD 강의를 학습한 내용을 바탕으로 재구성하였습니다. 문제가 되는 부분이 있다면 수정하겠습니다.

0개의 댓글