𝗨𝗻𝗶𝘁 𝗧𝗲𝘀𝘁 𝗔𝗜 𝗚𝘂𝗶𝗱𝗲: 𝗭𝗲𝗿𝗼 𝗛𝗮𝗹𝗹𝘂𝗰𝗶𝗻𝗮𝘁𝗶𝗼𝗻 유닛 테스트 AI 가이드: 환각(Hallucination) 제로

AI는 유닛 테스트에서 자주 실패합니다. 존재하지 않는 메서드를 만들어내거나, 잘못된 모크(mock) 구조를 생성하고, 존재하지 않는 임포트(import)를 사용하기도 합니다. 이는 AI에게 엄격한 컨텍스트가 부족하기 때문에 발생합니다.

결정론적(deterministic) 시스템을 사용하면 이를 방지할 수 있습니다. 추측하는 단계에서 강제하는 단계로 넘어가야 합니다.

다음은 5가지 주요 스택에 걸친 환각 제로 유닛 테스트 표준입니다.

기술 스택 표준

스택당 하나의 라이브러리만 선택하세요. 혼용하지 마십시오.

  • Node.js (NestJS/Express): Jest
  • React.js: Vitest + React Testing Library
  • Python: pytest
  • Angular: Jest
  • Laravel: Pest

핵심 비결: 프로젝트 범위 규칙

일반적인 프롬프트만으로는 부족합니다. IDE에 규칙을 직접 주입해야 합니다. Cursor를 사용한다면 .cursor/rules/ 디렉토리를 활용하세요.

각 기술에 맞는 특정 규칙 파일을 생성하세요:

  • unit-test-global.mdc: AAA (Arrange, Act, Assert) 패턴 설정.
  • unit-test-nestjs.mdc: TestingModule 및 jest-mock-extended 강제 적용.
  • unit-test-react.mdc: fireEvent 대신 user-event 사용 의무화.
  • unit-test-python.mdc: pytest-mock 패턴 표준화.
  • unit-test-laravel.mdc: Pest 구문 및 Mockery 사용 보장.

이 파일들은 계약(contract) 역할을 합니다. AI는 모든 프롬프트를 실행하기 전에 이 파일들을 읽습니다. 이를 통해 근본적으로 환각 현상을 방지할 수 있습니다.

유닛 테스트 계약

모든 테스트는 다음 다섯 가지 규칙을 따라야 합니다:

  • 격리(Isolation): 모든 외부 의존성을 모킹(Mock)하세요. 실제 DB나 HTTP 호출을 사용하지 마십시오.
  • 구조(Structure): AAA를 사용하세요. Arrange, Act, Assert 블록에 항상 주석을 다십시오.
  • 명명(Naming): "[condition]일 때 [behavior]해야 함" 형식을 사용하세요. "test 1"과 같은 모호한 이름은 피하십시오.
  • 커버리지(Coverage): 해피 패스(happy path), null 입력, 에러 경로 및 엣지 케이스를 테스트하세요.
  • 속도(Speed): 각 테스트는 100ms 이내에 실행되어야 합니다.

구현 단계

  1. 라이브러리 및 설정 파일을 구성합니다.
  2. .cursor/rules/ 폴더를 생성합니다.
  3. 프로젝트 루트에 영구 메모리 역할을 할 CLAUDE.md 파일을 추가합니다.
  4. CI 파이프라인에 커버리지 임계값을 설정합니다 (라인 커버리지 80% 목표).
  5. pre-commit hook을 사용하여 테스트되지 않은 코드가 저장소에 들어오지 않도록 합니다.

AI에게 테스트를 작성해 달라고 요청하는 것을 멈추세요. AI에게 테스트를 어떻게 작성해야 하는지 알려주기 시작하세요.

Source: https://dev.to/bhaumik-viitor/unit-test-ai-guide-zero-hallucination-cross-stack-standard-4mb2

Optional learning community: https://t.me/GyaanSetuAi