요구사항 추가
- 한 종류의 음료 여러 잔을 한 번에 담는 기능
- 키오스크 생각해보면, 메뉴 하나를 선택한 다음에 수량을 입력해서 5잔이면, 그에 맞게 [수량 * 가격]으로 주문할 금액이 정해지게 된다.
테스트 케이스 세분화하기
- 해피 케이스 (요구사항 -> 개발자가 잘 이해한 경우)
- 예외 케이스 (요구사항 -> 암묵적 요구사항)
- 암묵적 요구사항이란?
- 아메리카노 0개 입력을 했을 때 어떻게 대처할 것인가?
- 숫자를 음수를 입력했을 때 어떻게 할 것인가?
- 상식적으로는 바로 떠올리기 쉽지 않지만, 충분히 일어날 수도 있는 상황
- 암묵적 요구사항이란?
- 이런 케이스들을 다 막아야 꼼꼼한 테스트와 프로덕션 코드가 완성이 될 수 있음!!
경계값 테스트 (중요)
- 범위(이상, 이하, 초과, 미만), 구간, 날짜 등
구현코드
public final static String ORDER_MORE_THAN_ONE_DRINK = "음료는 1잔 이상 주문하실 수 있습니다.";
public void add(Beverage beverage, int count) {
if (count <= 0) {
throw new IllegalArgumentException(ORDER_MORE_THAN_ONE_DRINK);
}
for (int i = 0; i < count; i++) {
beverages.add(beverage);
}
}
- 0개 이하의 요청이 들어오면, 예외를 발생시키도록 설정해 준 코드이다.
@Test
void addSeveralBeverages() {
CafeKiosk cafeKiosk = new CafeKiosk();
Americano americano = new Americano();
cafeKiosk.add(americano, 2);
assertThat(cafeKiosk.getBeverages().get(0)).isEqualTo(americano);
assertThat(cafeKiosk.getBeverages().get(1)).isEqualTo(americano);
}
@Test
void addZeroBeverages() {
CafeKiosk cafeKiosk = new CafeKiosk();
Americano americano = new Americano();
assertThatThrownBy(() -> cafeKiosk.add(americano, 0))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage(ORDER_MORE_THAN_ONE_DRINK);
}
- 목적대로, 성공하는 테스트와 경계 값 테스트를 진행하였다.
느낀점
- 보통 화면에서 한번의 유효성 검증 이후, 백엔드로 넘어오게 된다.
- 그럼에도 불구하고, 화면에서 모종의 이유로 검증하지 않은 데이터가 넘어왔을 경우 백엔드에서 한 번더 막아주지 않으면, DB 서버 Error로 애플리케이션이 뻗을 수도 있다.(심각)
- 경계값 테스트와 여러 예외 케이스들에 대한 테스트 코드는 필수인 것 같다.
- 오히려 성공하는 테스트 보다 예외테스트에 대해서 세심하게 짤 필요가 있어 보인다.
'Spring관련 기술 > 테스트코드' 카테고리의 다른 글
Test Driven Development (0) | 2023.12.11 |
---|---|
테스트하기 어려운 영역을 분리하기 (0) | 2023.12.10 |
단위 테스트(Unit test) (0) | 2023.12.10 |
CafeKiosk 요구사항 및 수동 테스트 (0) | 2023.12.10 |
테스트가 필요한 이유? (0) | 2023.12.10 |