테스트 도구 실전 · 경계값 테스트로 실제 결함을 잡는다 · 실습
경계값 테스트로 실제 결함을 잡는다
목표
요금 함수의 정상 구현과 여덟 가지 결함 구현에 같은 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-lab2. /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로 받아들이는 결함을 잡아야 합니다.
참고
- 패키지는 이미지에 설치돼 있습니다. 인터넷 연결이나 pip install은 필요하지 않습니다.
- 준비 복사는 최초 한 번만 하세요. 다시 복사하면 작업 파일이 초기화됩니다.
- 테스트는
from service import ...로 제공 함수를 불러오세요. 채점은 별도 임시 디렉터리에 테스트만 복사해 정상·결함 구현에서 실행합니다. 단계별로 실제 테스트 실행 중 해당 결함을 잡아야 하며, 정상 코드에서는 실행한 테스트가 모두 통과해야 합니다. 수집 오류·임포트 오류·강제 종료는 검출로 인정하지 않습니다. 외부 파일이나 네트워크에 기대지 마세요. - 각 단계 채점은 45초 안에서 실행됩니다. 무한 루프나 실제 대기를 만들지 마세요.
8단계
- 빈 주문의 최소 요금을 막는다
- 최소 유효 수량을 확인한다
- 할인 직전의 경계를 잡는다
- 할인 시작점을 포함한다
- 할인 금액을 상수로 착각하지 않는다
- 상한 안팎을 함께 검증한다
- 음수 입력을 성공으로 바꾸지 않는다
- bool과 숫자 모양 문자열을 거절한다