테스트 코드 작성을 위한 효과적인 프롬프트 패턴을 알아봅니다.
테스트 프롬프트 구조
단위 테스트
함수 테스트
다음 함수에 대한 단위 테스트를 작성해줘.
함수:
function calculateDiscount(price, discountRate) {
// 구현
}
테스트 프레임워크: Jest
테스트 케이스:
- 정상 할인 계산
- 0% 할인
- 100% 할인
- 음수 가격 (에러)
- 잘못된 할인율 (에러)
AAA 패턴 (Arrange, Act, Assert) 사용
클래스 테스트
다음 클래스에 대한 테스트를 작성해줘.
클래스: ShoppingCart
메서드:
- addItem(product, quantity)
- removeItem(productId)
- getTotal()
- applyDiscount(code)
테스트 요구사항:
- 각 메서드별 테스트
- 엣지 케이스 포함
- Mock 사용 (할인 코드 검증)
- beforeEach로 초기화
비동기 함수 테스트
비동기 함수 테스트를 작성해줘.
함수:
async function fetchUserData(userId) {
const response = await api.get(`/users/${userId}`);
return response.data;
}
요구사항:
- API 호출 Mock
- 성공 케이스
- 실패 케이스 (404, 500)
- 타임아웃 처리
- async/await 사용
Mock과 Stub
API Mock
외부 API를 Mock하는 테스트를 작성해줘.
테스트 대상:
class PaymentService {
async processPayment(orderId, amount) {
const result = await this.paymentGateway.charge(amount);
// ...
}
}
Mock 대상: paymentGateway
테스트 케이스:
- 결제 성공
- 결제 실패
- 네트워크 에러
- 재시도 로직
Jest mock 함수 사용
데이터베이스 Mock
DB 연동 함수 테스트를 작성해줘.
함수:
async function createUser(userData) {
const user = await db.users.create(userData);
await sendWelcomeEmail(user.email);
return user;
}
Mock 대상:
- db.users.create
- sendWelcomeEmail
검증:
- 올바른 데이터로 DB 호출
- 이메일 발송 호출
- 반환값 확인
통합 테스트
API 통합 테스트
REST API 통합 테스트를 작성해줘.
프레임워크: Jest + Supertest
엔드포인트: POST /api/users
테스트:
1. 정상 사용자 생성 - 201
2. 중복 이메일 - 409
3. 필수 필드 누락 - 400
4. 인증 없이 접근 - 401
요구사항:
- 테스트 DB 사용
- 각 테스트 전후 정리
- 응답 구조 검증
DB 통합 테스트
데이터베이스 통합 테스트를 작성해줘.
ORM: Prisma
DB: PostgreSQL (테스트용)
테스트 대상: UserRepository
테스트:
- create: 사용자 생성
- findById: 조회
- update: 수정
- delete: 삭제
- findByEmail: 이메일로 검색
설정:
- 테스트 전 마이그레이션
- 각 테스트 후 데이터 정리
- 트랜잭션 롤백 방식
E2E 테스트
Playwright 테스트
Playwright로 E2E 테스트를 작성해줘.
시나리오: 사용자 로그인 플로우
단계:
1. 로그인 페이지 이동
2. 이메일/비밀번호 입력
3. 로그인 버튼 클릭
4. 대시보드로 리다이렉트 확인
5. 사용자 이름 표시 확인
추가 테스트:
- 잘못된 비밀번호
- 빈 필드 제출
- 로그아웃
Page Object Model 패턴 사용
Cypress 테스트
Cypress로 장바구니 테스트를 작성해줘.
시나리오:
1. 상품 페이지 접속
2. 상품 장바구니에 추가
3. 장바구니 페이지로 이동
4. 수량 변경
5. 상품 삭제
6. 결제 페이지로 이동
요구사항:
- Custom commands 사용
- 네트워크 요청 가로채기
- 스크린샷 캡처
- 재사용 가능한 선택자
테스트 커버리지
커버리지 목표
다음 모듈의 테스트 커버리지를 높여줘.
모듈: AuthService
현재 커버리지: 60%
목표: 90%
누락된 테스트:
- 토큰 만료 처리
- 리프레시 토큰 갱신
- 동시 로그인 제한
- 비밀번호 재설정
각 케이스에 대한 테스트 작성
테스트 유틸리티
테스트 헬퍼
테스트용 유틸리티 함수들을 만들어줘.
필요한 헬퍼:
1. createMockUser() - 테스트 사용자 생성
2. createMockOrder() - 테스트 주문 생성
3. setupTestDB() - 테스트 DB 초기화
4. cleanupTestDB() - 테스트 데이터 정리
요구사항:
- faker.js로 랜덤 데이터
- 커스텀 옵션 오버라이드
- TypeScript 타입 지원
테스트 픽스처
테스트 픽스처를 생성해줘.
픽스처 종류:
- users.json - 테스트 사용자들
- products.json - 테스트 상품들
- orders.json - 테스트 주문들
포함:
- 다양한 상태 (active, inactive)
- 관계 데이터 연결
- 로드 함수
실전 프롬프트
전체 테스트 스위트
다음 서비스에 대한 전체 테스트를 작성해줘.
서비스: OrderService
메서드:
- createOrder(userId, items)
- cancelOrder(orderId)
- getOrderStatus(orderId)
- processRefund(orderId)
테스트 포함:
1. 단위 테스트 (각 메서드)
2. 통합 테스트 (DB 연동)
3. Mock 테스트 (결제 서비스)
커버리지 목표: 85%+
TDD 접근
TDD 방식으로 다음 기능을 개발해줘.
기능: 비밀번호 강도 검사기
요구사항:
- 최소 8자
- 대문자 포함
- 소문자 포함
- 숫자 포함
- 특수문자 포함
단계:
1. 실패하는 테스트 먼저
2. 최소한의 구현
3. 리팩토링
4. 반복
팁
| 팁 | 설명 |
|---|---|
| 테스트 대상 명시 | 함수/클래스 코드 포함 |
| 케이스 나열 | 정상/예외 케이스 목록 |
| 프레임워크 지정 | Jest, Vitest 등 |
| Mock 대상 | 외부 의존성 명시 |
| 패턴 요청 | AAA, Page Object 등 |
좋은 테스트는 좋은 코드의 기반입니다.