Devin.KR

명세에서 독립적인 테스트 만들기

반례로 테스트의 검출 능력을 확인하고 기존 계약을 보호합니다.

진도 0%

레슨

  1. 요구사항에서 테스트 도출하기

    제목 길이의 바로 아래·경계·바로 위 입력을 독립 기대 결과로 판정합니다.

  2. 완료 상태 전이 검사

    미완료에서 완료로 바뀌는 전이와 완료 재요청의 결과를 모델로 검사합니다.

  3. 틀린 구현을 잡는 반례

    길이 비교와 식별자 조회를 잘못 구현한 제공 변형을 JUnit 테스트로 검출합니다.

  4. 회귀 검사 범위 정하기

    완료 API를 추가하고 생성·조회 계약의 회귀 테스트를 함께 실행합니다.

명세에서 독립적인 테스트 만들기 미션

m04-small-changes 미션 solution 전체를 이어받아 완료 HTTP 경계와 독립 테스트를 확장합니다. 기존 서비스의 complete 계약은 유지하고 새 명세·검출 fixture·HTTP 검사를 준비했습니다. starter에는 완료 응답 상태 결함과 반례 누락이 있습니다.

요구사항

  • POST /tasks/{id}/complete는 본문 없이 200 Task를 반환합니다. 반복 완료도 같은 값이며 다른 항목·목록 순서·다음 번호를 보존합니다.
  • 잘못된 ID는 400 INVALID_ID, 없는 양의 정수는 404 NOT_FOUND입니다. 큰 양의 정수도 없는 ID입니다. 경로 문자열 파싱과 서비스 입력 계약을 구분합니다.
  • IndependentProbe.java에 구현의 출력 복사 없이 경계 길이·없는 ID·반복 완료의 명세 기대값을 작성합니다. Candidate.java와 DetectionTest.java를 바꾸지 않습니다.
  • 기존 Java·MockMvc 검사와 Python 참조 모델을 보존합니다. 허용 변경은 TaskController.java·TaskApplication.java·IndependentProbe.java·review.md입니다.
  • review.md에 각 변형의 구별 입력·명세 근거·테스트 이름·정상 통과와 검출 성공·회귀 범위·실제 실행 증거·미확인 범위를 기록합니다. 실제 AI 또는 제공 fixture 사용 여부도 적습니다.

완료 기준

  • ./mvnw test (캐시 준비 환경 ./mvnw -o -q test)가 종료 코드 0이며 보고서 failures·errors·skipped가 0입니다.
  • DetectionTest에서 정상 fixture는 통과하고 경계 비교·없는 ID·반복 완료 변형 세 개가 assertion 실패로 검출됩니다. 컴파일 오류나 업무 예외만으로 검출 성공을 인정하지 않습니다.
  • CompletionHttpTest가 완료·재완료·다른 항목 보존·없는 ID 뒤 상태와 다음 번호·잘못된 ID·큰 양의 ID를 검사합니다. 기존 생성·조회·서비스 회귀도 통과합니다.
  • python3 check_scope.py로 보호 해시와 허용 경로를 확인하고 bash check_reference.sh로 앞 Python 참조 모델을 재실행합니다.
  • standalone MockMvc 범위만 확인하며 실제 소켓·전체 빈 구성·동시성·운영 배포는 미확인입니다. 문서의 근거 타당성은 사람이 검토합니다.
./mvnw test
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 요구사항과 실제 검증 근거를 연결해 설명합니다.
  • 본인이 판단한 사항과 AI에 맡긴 사항을 구분합니다.
  • 통과·실패·미확인 상태를 사실대로 기록합니다.