| name | spring-test-writer |
| description | Spring Boot 프로젝트에서 테스트 후보를 제안하거나 테스트 코드를 작성한다. 회원가입, 로그인, 인증/인가, 토큰, 비밀번호 검증 같은 계정 보안 테스트와 상품 조회/필터링/정렬/페이지네이션, 주문/장바구니/재고/결제/포인트/환불/웹훅 테스트를 포함한다. 사용자가 '테스트 코드 작성해줘', '테스트 추가해줘', '이 기능 테스트 뭐 해야 해?', '어떤 테스트를 작성해야 할지 조언해줘', '테스트 후보 알려줘', '~를 검증하는 테스트 작성해줘', 'Service 테스트 작성해줘', 'Controller 테스트 작성해줘', 'Repository 테스트 작성해줘'라고 요청하면 사용한다. |
역할
Spring Boot 프로젝트에서 테스트 후보를 제안하거나, 사용자가 지정한 검증 대상에 맞는 테스트 코드를 작성한다.
사용자가 테스트 대상을 명확히 모르는 경우에는 테스트 코드를 바로 작성하지 않고 테스트 후보와 우선순위를 먼저 제안한다.
사용자가 특정 검증 대상을 명시한 경우에는 팀 테스트 컨벤션에 맞춰 테스트 코드를 작성한다.
작업 전 확인
작업 시작 전 문서를 바로 열지 말고 먼저 테스트 범위를 좁힌다.
- 사용자가 파일/클래스/기능을 지정했으면 해당 프로덕션 코드와 인접 테스트를 먼저 확인한다.
- 현재 브랜치의 변경사항 기준이면
git status --short, git diff --stat, git diff --name-only로 범위를 먼저 확인한다.
- 대상이 불명확하면
rg로 Controller, Service, Repository, Entity, 기존 테스트 파일을 찾아 범위를 좁힌다.
이 프로젝트는 기본적으로 Spring Boot 4.0.6, Java 21, Gradle, JUnit Platform 테스트 환경을 사용한다. 테스트 의존성 추가는 사용자가 명확히 요청하거나 현재 의존성으로 불가능한 경우에만 제안한다.
문서 로딩 규칙
이 섹션의 references/... 경로는 워크스페이스 루트가 아니라, 이 SKILL.md가 있는 스킬 디렉터리 기준으로 해석한다.
문서는 아래 조건에 맞을 때만 읽는다.
references/test-convention.md
- 실제 테스트 코드를 작성하거나 기존 테스트를 수정할 때
- 테스트 후보만 제안하는 경우에는 메서드명/스타일 판단이 꼭 필요할 때만 읽는다.
docs/api/common.md
- Controller 테스트, 공통 응답 형식, 공통 에러 응답, 인증 실패 응답을 검증할 때
docs/api/{domain}.md
- 특정 API의 Method, URL, Request/Response, status code, error code, auth 요구사항을 검증할 때
docs/api/*.md 전체를 한 번에 읽지 않고, 대상 도메인 문서만 읽는다.
docs/ERD.md
- Repository 테스트, Entity 매핑, DB 상태 검증, 관계/unique/nullable/enum 검증이 필요할 때
README.md
- 테스트 실행 방법, 프로젝트 범위, 환경변수, 외부 서비스 설정이 테스트 작성에 직접 필요할 때
테스트 작업에서는 docs/CODE_CONVENTION.md를 기본으로 읽지 않는다. 테스트 스타일은 references/test-convention.md를 기준으로 한다.
작업 모드
1. 테스트 후보 조언 모드
사용자가 "어떤 테스트를 작성해야 할지 모르겠다", "테스트 조언해줘", "테스트 후보 알려줘"처럼 요청하면 테스트 코드를 작성하지 않는다.
현재 코드, 문서, 변경사항을 확인한 뒤 작성하면 좋은 테스트 후보만 제안한다.
체크리스트는 요청 도메인이 명확할 때 해당 reference 1개만 읽는다. 전체 테스트 전략을 요청받은 경우에도 먼저 변경 파일과 도메인을 기준으로 우선순위를 좁힌 뒤 필요한 reference만 순차적으로 읽는다.
- 단위 테스트, 계층별 테스트(Controller/Repository 등), 통합 테스트를 구분한다.
- 우선순위가 높은 테스트부터 정리한다.
- 회원가입, 로그인, 인증/인가, 토큰, 비밀번호 검증처럼 계정 보안과 접근 권한이 바뀌는 로직을 우선 검토한다.
- 상품 목록 조회, 필터링, 정렬, 페이지네이션, 단건 상세처럼 결제 기준 데이터가 바뀌는 로직을 검토한다.
- 주문, 장바구니, 재고 선차감, 주문 취소처럼 결제 전 상태와 소유권이 바뀌는 로직을 우선 검토한다.
- 결제, 포인트, 환불, 웹훅처럼 돈과 상태가 바뀌는 로직을 우선 검토한다.
- 단순 getter/setter나 의미 없는 CRUD 테스트는 후순위로 둔다.
- 각 후보마다 필요한 이유를 짧게 설명한다.
결과는 아래 항목을 포함해 작성한다.
- 테스트 대상
- 테스트 종류
- 테스트 메서드명 후보
- 검증 내용
- 우선순위
- 작성 이유
2. 테스트 코드 작성 모드
사용자가 "~를 검증하는 테스트 작성해줘"처럼 구체적인 검증 대상을 제시하면 실제 테스트 코드를 작성한다.
references/test-convention.md를 읽고 팀 테스트 컨벤션을 적용한다.
- 회원가입, 로그인, 인증/인가, 토큰, 비밀번호 검증 테스트라면
references/auth-test-checklist.md를 읽고 누락 위험을 확인한다.
- 상품 목록 조회, 필터링, 정렬, 페이지네이션, 단건 조회 테스트라면
references/product-test-checklist.md를 읽고 누락 위험을 확인한다.
- 주문, 장바구니, 재고 선차감, 주문 취소 테스트라면
references/order-cart-stock-test-checklist.md를 읽고 누락 위험을 확인한다.
- 결제 확정, 포인트, 환불, 웹훅 테스트라면
references/payment-test-checklist.md를 읽고 누락 위험을 확인한다.
- 기존 패키지 구조와 테스트 스타일을 우선 따른다.
- 테스트 작성 중 프로덕션 코드 결함이 의심되면 코드를 수정하지 말고 원인과 수정 제안을 별도로 설명한다.
작성 후 아래 내용을 함께 정리한다.
- 추가한 테스트 파일
- 추가한 테스트 메서드
- 각 테스트가 검증하는 내용
- 실패 가능성이 있는 부분
금지사항
- 테스트를 위해 프로덕션 코드를 임의로 수정하지 않는다.
- 불필요한 테스트 의존성을 추가하지 않는다.
- 단순 getter/setter 테스트를 우선 작성하지 않는다.
- 의미 없는 CRUD 테스트를 대량 생성하지 않는다.
- 기존 코드 스타일과 패키지 구조를 무시하지 않는다.
- 테스트 실패를 피하려고 핵심 검증을 제거하거나 약하게 만들지 않는다.