학습 본문으로 건너뛰기
VAIRODE
pytest·debugging·logging10번째 작은 수업
오늘은 질문 하나만 해결해요10 / 52

처음이어도 괜찮아요 · 그림부터 시작해요

AAA와 Given-When-Then으로 test 의도를 드러낸다

오늘의 질문

Arrange·Act·Assert 또는 Given·When·Then 구조로 fixture 준비, 단일 행동, 관찰·판정을 분리해 실패를 읽을 수 있게 만든다. 이 판단을 생략하면 통과한 test와 많은 log가 있어도 결함을 놓치거나 잘못된 수정을 승인할 수 있습니다.

아직 답을 몰라도 괜찮아요. 아래 작은 예시를 보고 먼저 예상해 보세요.

01 · 가볍게 시작하기

정답을 보기 전에 먼저 골라볼까요?

눈으로만 보고 답 하나를 떠올려 보세요서비스 command handler unit test에서 AAA와 Given-When-Then으로 test 의도를 드러낸다 계약을 적용한다.synthetic td10 fixture · secret 없는 고정 입력 · exact Python 3.14.6
  1. 1
    먼저 골라보기

    틀려도 괜찮아요. 지금 생각한 답 하나를 정해요.

  2. 2
    그림으로 확인하기

    움직이는 순서와 달라지는 곳만 천천히 찾아요.

  3. 3
    내 말로 다시 말하기

    한 문장으로 말해 보면 내가 이해한 곳을 확인할 수 있어요.

02 · 그림으로 보기

그림이 움직이는 순서를 직접 확인해요

AAA와 Given-When-Then으로 test 의도를 드러낸다의 관찰·추론·검증 지도AAA와 Given-When-Then으로 test 의도를 드러낸다의 정상 경로와 실패 경로 및 최초 불일치 지점을 번호와 선 종류로 구분한 도식01관찰4개 핵심 용어02추론3개 작동 규칙03검증3개 통과 기준흐름도 · AAA와 Given-When-Then으로 test 의도를 드러낸다에서 숨은 입력·상태·제어 흐름·oracle·관측 증거를 한 화면에서 대조한다.결과가 기준을 통과하지 못하면 관찰로 돌아가 최소 반례를 다시 수집합니다.
  1. 01관찰Arrange · Act · Assert · Given-When-Then
  2. 02추론Arrange는 필요한 precondition만 만들고 Act는 검증할 public behavior를 한 번 수행한다. Assert는 요구사항 oracle과 관찰 가능한 효과를 판정하며 구현을 다시 계산해 복제하지 않는다. AAA는 주석 형식이 아니라 책임 분리이며 복잡한 workflow는 여러 behavior test로 나눌 수 있다.
  3. 03검증AAA와 Given-When-Then으로 test 의도를 드러낸다의 예상 결과·관찰 결과·판정 oracle을 실행 전에 분리해 기록한다. Arrange에서 이미 대상 behavior를 호출한다.에서 최초 불일치 지점과 근본 원인을 재현 가능한 evidence로 국소화한다. 각 test에 하나의 Act와 계약에서 독립 도출한 Assert가 있는 구조을 정상·경계·실패 fixture에 적용하고 false green·false red가 없는지 검증한다.
AAA와 Given-When-Then으로 test 의도를 드러낸다에서 숨은 입력·상태·제어 흐름·oracle·관측 증거를 한 화면에서 대조한다.AAA와 Given-When-Then으로 test 의도를 드러낸다의 baseline, injected defect, first divergence, assertion/log/trace evidence와 sealed regression을 연결한 flowchart현재 화면: 정적 요약 지도 · 읽는 방법: fixture와 단계 탭을 선택하면 expected·actual·evidence가 동기화되고 최종 단계에서만 판정과 수정 근거를 공개한다. · 모션 축소 설계: 자동 이동 없이 선택 상태를 즉시 표시하고 번호·문자 label·선 종류·도형으로 색상 외 의미를 중복 제공한다.

처음 보는 말도 책 읽듯 풀어봐요

이 수업은 쉬운 뜻과 생활 예를 아직 함께 준비하지 못했어요. 설명 없는 정확한 이름은 먼저 보여 주지 않을게요.

그림에서 찾을 쉬운 규칙

  1. 01Arrange는 필요한 precondition만 만들고 Act는 검증할 public behavior를 한 번 수행한다.
  2. 02Assert는 요구사항 oracle과 관찰 가능한 효과를 판정하며 구현을 다시 계산해 복제하지 않는다.
  3. 03AAA는 주석 형식이 아니라 책임 분리이며 복잡한 workflow는 여러 behavior test로 나눌 수 있다.

03 · 같이 풀어보기

한 단계씩 따라가면 어렵지 않아요

서비스 command handler unit test에서 AAA와 Given-When-Then으로 test 의도를 드러낸다 계약을 적용한다.

함께 볼 작은 예시synthetic td10 fixture · secret 없는 고정 입력 · exact Python 3.14.6
내 말로 8자 이상 적어요 · 0 / 240

04 · 이제 내가 해볼 차례

여기까지 오면 이런 일을 할 수 있어요

Arrange·Act·Assert 또는 Given·When·Then 구조로 fixture 준비, 단일 행동, 관찰·판정을 분리해 실패를 읽을 수 있게 만든다.

  • AAA와 Given-When-Then으로 test 의도를 드러낸다의 예상 결과·관찰 결과·판정 oracle을 실행 전에 분리해 기록한다.
  • Arrange에서 이미 대상 behavior를 호출한다.에서 최초 불일치 지점과 근본 원인을 재현 가능한 evidence로 국소화한다.
  • 각 test에 하나의 Act와 계약에서 독립 도출한 Assert가 있는 구조을 정상·경계·실패 fixture에 적용하고 false green·false red가 없는지 검증한다.

05 · 자주 헷갈리는 지점

틀린 답도 이유를 알면 다음에는 맞힐 수 있어요

01세 개의 주석만 붙이면 어떤 test도 AAA 구조가 된다.

한 번 더 생각해 볼 질문AAA와 Given-When-Then으로 test 의도를 드러낸다의 최소 fixture에서 이 주장을 깨는 관찰값과 판정 근거를 각각 한 줄로 쓰세요.

이렇게 고쳐 생각해요Arrange는 필요한 precondition만 만들고 Act는 검증할 public behavior를 한 번 수행한다.

02Act 단계에서 여러 public operation을 실행해도 결과가 맞으면 괜찮다.

한 번 더 생각해 볼 질문AAA와 Given-When-Then으로 test 의도를 드러낸다의 최소 fixture에서 이 주장을 깨는 관찰값과 판정 근거를 각각 한 줄로 쓰세요.

이렇게 고쳐 생각해요Assert는 요구사항 oracle과 관찰 가능한 효과를 판정하며 구현을 다시 계산해 복제하지 않는다.

03Assert에서 production algorithm을 복사하면 가장 정확한 expected가 된다.

한 번 더 생각해 볼 질문AAA와 Given-When-Then으로 test 의도를 드러낸다의 최소 fixture에서 이 주장을 깨는 관찰값과 판정 근거를 각각 한 줄로 쓰세요.

이렇게 고쳐 생각해요AAA는 주석 형식이 아니라 책임 분리이며 복잡한 workflow는 여러 behavior test로 나눌 수 있다.

06 · 더 궁금할 때만 보기

선생님과 검토자를 위한 믿을 만한 원문

원문과 어디까지 참고했는지 펼쳐 보기처음 배우는 동안에는 열지 않아도 괜찮아요.