LabHub
배우기 러닝패스 코스

テストツール実戦

境界値テストで実際の不具合を見つける

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

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

왜 중요한가

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

단계

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

참고

빈 주문의 최소 요금을 막는다

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

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

빈 주문에도 350원을 청구하는 결함을 떠올려 보세요.

채점은 bash /opt/lab/checks/test-boundaries-lab/01-contract.sh로 직접 재현할 수 있습니다. 파일 저장 후 다시 실행하세요.

최소 유효 수량을 확인한다

/root/work/test-boundaries-lab/test_service.py에서 price(1)의 금액이 350인지 테스트하세요. 기존 0개 테스트도 유지합니다.

가격이 양수라는 검사로는 400원을 청구하는 버그가 통과합니다.

채점은 bash /opt/lab/checks/test-boundaries-lab/02-contract.sh로 직접 재현할 수 있습니다. 파일 저장 후 다시 실행하세요.

할인 직전의 경계를 잡는다

/root/work/test-boundaries-lab/test_service.py에서 price(9)가 3150인지 테스트하세요. 9개부터 잘못 할인하는 구현을 검출해야 합니다.

할인 시작 직전 값은 평범한 중간값과 다른 역할을 합니다.

채점은 bash /opt/lab/checks/test-boundaries-lab/03-contract.sh로 직접 재현할 수 있습니다. 파일 저장 후 다시 실행하세요.

할인 시작점을 포함한다

/root/work/test-boundaries-lab/test_service.py에서 price(10)이 3000인지 테스트하세요. 10개에서는 할인하지 않는 > 조건 오류를 잡습니다.

경계에서 참이어야 하는 조건인지 정책 표를 다시 읽어 보세요.

채점은 bash /opt/lab/checks/test-boundaries-lab/04-contract.sh로 직접 재현할 수 있습니다. 파일 저장 후 다시 실행하세요.

할인 금액을 상수로 착각하지 않는다

/root/work/test-boundaries-lab/test_service.py에서 price(11)이 3300인지 테스트하세요. 할인 구간 전체를 고정 3000원으로 반환하는 구현을 검출합니다.

경계 한 점만 검사하면 할인 구간의 기울기가 틀려도 알 수 없습니다.

채점은 bash /opt/lab/checks/test-boundaries-lab/05-contract.sh로 직접 재현할 수 있습니다. 파일 저장 후 다시 실행하세요.

상한 안팎을 함께 검증한다

/root/work/test-boundaries-lab/test_service.py에서 price(100)은 30000이며 price(101)은 ValueError인지 pytest.raises로 확인하세요.

가장 큰 합법값과 그 바로 다음 불법값을 한 쌍으로 다룹니다.

채점은 bash /opt/lab/checks/test-boundaries-lab/06-contract.sh로 직접 재현할 수 있습니다. 파일 저장 후 다시 실행하세요.

음수 입력을 성공으로 바꾸지 않는다

/root/work/test-boundaries-lab/test_service.py에서 price(-1)이 ValueError인지 테스트하세요. 음수 요금 반환을 정상 처리로 보지 않습니다.

try/except에서 아무 일도 하지 않으면 예외가 안 나도 통과할 수 있습니다. pytest.raises를 쓰세요.

채점은 bash /opt/lab/checks/test-boundaries-lab/07-contract.sh로 직접 재현할 수 있습니다. 파일 저장 후 다시 실행하세요.

bool과 숫자 모양 문자열을 거절한다

/root/work/test-boundaries-lab/test_service.py에서 True, False, 1.0, '1', None은 모두 TypeError인지 매개변수화한 테스트를 추가하세요. 특히 bool을 int로 받아들이는 결함을 잡아야 합니다.

type(x)와 isinstance(x, int)의 차이가 드러나는 입력을 포함합니다. 테스트는 구현 소스가 아니라 공개 함수를 호출해야 합니다.

채점은 bash /opt/lab/checks/test-boundaries-lab/08-contract.sh로 직접 재현할 수 있습니다. 파일 저장 후 다시 실행하세요.