DaleSchool

테스트를 맡겨보자

중급20분

학습 목표

  • 기존 코드에 대한 테스트를 Claude에게 생성하도록 요청할 수 있다
  • TDD 방식으로 Claude와 협업하는 흐름을 이해한다
  • 테스트 실행 → 실패 → 수정 사이클을 Claude와 반복할 수 있다

동작하는 코드

테스트할 함수가 있는 프로젝트에서 Claude Code를 시작합니다:

> src/utils/math.ts에 있는 모든 함수에 대해 유닛 테스트를 작성해줘.
> Jest를 사용하고, 엣지 케이스도 포함해줘.

Claude가 테스트 파일을 생성합니다. 바로 실행해봅시다:

> npm test를 실행해줘

실패하는 테스트가 있나요? Claude에게 수정을 맡기세요:

> 실패하는 테스트를 확인하고 코드를 수정해줘

직접 수정하기

이번에는 테스트를 먼저 작성하는 TDD 방식으로 해봅시다:

> 이메일 유효성 검사 함수의 테스트를 먼저 작성해줘.
> 테스트 케이스: 정상 이메일, @없는 이메일, 도메인 없는 이메일, 빈 문자열
> 함수 자체는 아직 만들지 마.

테스트를 실행하면 당연히 실패합니다:

> npm test를 실행해줘

이제 구현을 요청합니다:

> 이 테스트를 통과하는 validateEmail 함수를 구현해줘
> npm test를 다시 실행해줘

모든 테스트가 통과하는 걸 확인하세요.

"왜?" — AI 시대에 테스트가 더 중요한 이유

AI가 코드를 대신 작성하는 세상에서, 테스트는 AI의 결과물을 검증하는 안전망입니다.

Claude Code + 테스트 워크플로우

1. Claude에게 테스트 생성 요청
2. 테스트 실행 → 실패 확인
3. Claude에게 구현 요청
4. 테스트 실행 → 통과 확인
5. 엣지 케이스 추가 요청
6. 반복

테스트 생성 시 유용한 프롬프트

> 이 함수의 테스트를 작성해줘. 정상 케이스, 에러 케이스, 엣지 케이스를 포함해줘.
> 이 API 엔드포인트의 통합 테스트를 작성해줘. 성공/실패/인증 에러 케이스를 포함해줘.
> 현재 테스트 커버리지가 낮은 파일을 찾아서 테스트를 추가해줘.

심화 학습

Claude가 만든 테스트를 그대로 써도 되나요?

Claude가 생성한 테스트는 좋은 출발점이지만, 비즈니스 로직에 대한 이해는 여러분이 더 잘 알고 있습니다. 특히:

  • 도메인 특화 엣지 케이스는 직접 추가하세요.
  • 테스트 이름이 의도를 잘 표현하는지 확인하세요.
  • 불필요하게 구현에 결합된 테스트가 아닌지 확인하세요.
  1. 기존 프로젝트에서 테스트가 없는 함수를 하나 골라 Claude에게 테스트 생성을 요청하세요.
  2. TDD 방식으로 새 함수를 만들어보세요: 테스트 먼저 → 구현 나중.
  3. Claude에게 "이 테스트에 빠진 엣지 케이스가 있어?" 라고 물어보세요.

Q1. TDD 방식으로 Claude Code와 작업할 때의 올바른 순서는?

  • A) 구현 → 테스트 → 실행
  • B) 테스트 작성 → 실행(실패) → 구현 → 실행(통과)
  • C) 구현 → 배포 → 테스트
  • D) 테스트 없이 구현만 한다