Devin.KR

잘못된 입력을 설명하고 테스트하기

예외 발생 위치를 추적하고 실패 입력에도 일관된 결과를 제공합니다.

진도 0%

레슨

  1. 숫자가 아닌 입력 처리

    변환 오류와 업무 규칙 위반을 구분합니다.

  2. 호출 위치에서 오류 찾기

    예외가 호출자를 거쳐 전파되는 순서를 설명합니다.

  3. 정상값과 경계값을 함께 검증

    경계 입력으로 규칙의 누락을 찾습니다.

  4. 재현 가능한 오류 보고

    기대 결과·실제 결과·재현 절차를 구분합니다.

잘못된 입력이 기존 기록을 손상하지 않도록 고칩니다.

앞 모듈 미션 solution 전체를 이어받아 기존 CLI·요약·경로 검사를 유지합니다. 같은 프로세스의 메모리 목록에 add_record로 한 건을 추가하는 API를 확장하고 모든 입력 검증 뒤에만 목록을 변경합니다. 파일 저장과 새 CLI는 이번 범위가 아닙니다.

요구사항

  • parse_pages·parse_cost는 성공 값 또는 명시적인 실패 결과를 제공합니다.
  • 빈 입력·숫자가 아닌 입력·음수 입력을 테스트합니다.
  • docs/bugs.md에 호출 위치와 기대·실제 결과 및 수정 전후 근거를 남깁니다.
  • parse_pages·parse_cost는 문자열을 받아 (정수, None) 또는 (None, EMPTY|NOT_INTEGER|NEGATIVE)를 반환합니다. 앞뒤 공백·선택적 부호·ASCII 정수 표기 계약을 유지합니다.
  • add_record(records, raw_title, raw_pages, raw_cost, raw_completed)는 성공 시 한 건 추가 후 OK, 실패 시 ERR_TITLE·ERR_PAGES_<오류>·ERR_COST_<오류>·ERR_COMPLETED를 반환합니다. 실패 시 목록 전체를 보존합니다. 제목은 공백 제거 후 비어 있지 않고 완료 표시는 0 또는 1입니다.

완료 기준

  • 잘못된 금액과 쪽수 입력 뒤 기록 수와 합계가 변하지 않습니다.
  • 정상·경계·실패 사례 테스트가 모두 통과하고 예외 전체를 숨기는 처리가 없습니다.
  • 기존 20개와 신규 6개 unittest가 모두 통과합니다. 빈 목록 실패·기존 목록 전체 보존·실패 뒤 정상 추가·출력 없는 파서·예상하지 않은 자료형 오류도 확인합니다.
python3 -m unittest discover -s tests -p "test_*.py"
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 예외 메시지를 근거로 실패 위치를 설명합니다.
  • 금액 합계의 잘못된 입력 정책이 문서와 코드에서 일치합니다.