LabHub
배우기 러닝패스 코스

테스트 도구 실전 · 경계값 테스트로 실제 결함을 잡는다 · 실습

경계값 테스트로 실제 결함을 잡는다

LabHub 에서 이어서 보기

목표

요금 함수의 정상 구현과 여덟 가지 결함 구현에 같은 pytest 테스트를 실행합니다.

왜 중요한가

정상 요청 한 번의 성공은 경계값과 장애 복구를 보장하지 않습니다. 이 실습은 각 함수의 계약을 작게 구현하거나 테스트한 뒤 실제 실행으로 연결합니다. 코드가 존재하는지나 보고서 문구만 보지 않고 결과·예외·저장 상태를 검사합니다. 앞 단계의 코드를 유지하며 다음 단계로 진행하세요.

단계

1. /root/work/test-boundaries-lab/test_service.py에서 price(0)이 정확히 0인지 assert하는 pytest 테스트를 작성하세요. 함수 호출만 하거나 결과가 int인지 검사하는 것으로는 부족합니다. 첫 준비는 다음 명령으로 합니다.

mkdir -p /root/work/test-boundaries-labcp /opt/fixtures/practice_depth/test-boundaries-lab/* /root/work/test-boundaries-lab/cd /root/work/test-boundaries-lab

2. /root/work/test-boundaries-lab/test_service.py에서 price(1)의 금액이 350인지 테스트하세요. 기존 0개 테스트도 유지합니다.
3. /root/work/test-boundaries-lab/test_service.py에서 price(9)가 3150인지 테스트하세요. 9개부터 잘못 할인하는 구현을 검출해야 합니다.
4. /root/work/test-boundaries-lab/test_service.py에서 price(10)이 3000인지 테스트하세요. 10개에서는 할인하지 않는 > 조건 오류를 잡습니다.
5. /root/work/test-boundaries-lab/test_service.py에서 price(11)이 3300인지 테스트하세요. 할인 구간 전체를 고정 3000원으로 반환하는 구현을 검출합니다.
6. /root/work/test-boundaries-lab/test_service.py에서 price(100)은 30000이며 price(101)은 ValueError인지 pytest.raises로 확인하세요.
7. /root/work/test-boundaries-lab/test_service.py에서 price(-1)이 ValueError인지 테스트하세요. 음수 요금 반환을 정상 처리로 보지 않습니다.
8. /root/work/test-boundaries-lab/test_service.py에서 True, False, 1.0, '1', None은 모두 TypeError인지 매개변수화한 테스트를 추가하세요. 특히 bool을 int로 받아들이는 결함을 잡아야 합니다.

참고

8단계

  1. 빈 주문의 최소 요금을 막는다
  2. 최소 유효 수량을 확인한다
  3. 할인 직전의 경계를 잡는다
  4. 할인 시작점을 포함한다
  5. 할인 금액을 상수로 착각하지 않는다
  6. 상한 안팎을 함께 검증한다
  7. 음수 입력을 성공으로 바꾸지 않는다
  8. bool과 숫자 모양 문자열을 거절한다