𝗨𝗻𝗶𝘁 𝗧𝗲𝘀𝘁 𝗔𝗜 𝗚𝘂𝗶𝗱𝗲: 𝗭𝗲𝗿𝗼 𝗛𝗮𝗹𝗹𝘂𝗰𝗶𝗻𝗮𝘁𝗶𝗼𝗻 유닛 테스트 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 이내에 실행되어야 합니다.
구현 단계
- 라이브러리 및 설정 파일을 구성합니다.
.cursor/rules/폴더를 생성합니다.- 프로젝트 루트에 영구 메모리 역할을 할
CLAUDE.md파일을 추가합니다. - CI 파이프라인에 커버리지 임계값을 설정합니다 (라인 커버리지 80% 목표).
- 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