--- name: core-tdd description: Domain, UseCase, Service, Command, Query 클래스를 구현할 때 반드시 사용. 도메인 로직, 비즈니스 로직, 서비스 구현 시 TDD(Red-Green-Refactor) 방식으로 진행. "도메인 구현", "서비스 구현", "UseCase 구현", "Command 생성", "비즈니스 로직" 작업 시 자동 발동. --- # 코어 계층 TDD 지침 ## TDD 순서 1. **Command/Query** - 테스트 → 구현 → 리팩토링 2. **Domain** - 테스트 → 구현 → 리팩토링 3. **UseCase** - 인터페이스 정의 (테스트 불필요) 4. **Service** - 테스트 → 구현 → 리팩토링 ## Red-Green-Refactor 사이클 ### Red (테스트 작성) 1. 실패하는 테스트 먼저 작성 2. 컴파일 에러 해결을 위한 최소 stub만 생성 3. 테스트 실행하여 의도한 실패 확인 ### Green (구현) 1. 테스트를 통과시키는 최소한의 코드 작성 2. 명명 규칙 준수 (Find/Save/Modify/Delete) 3. 정적 팩토리 메서드 패턴 (newXxx/withId) ### Refactor (개선) 1. 테스트 통과 상태 유지 2. 중복 제거, 가독성 개선 3. 아키텍처/코딩 규칙 준수 ## 핵심 규칙 ### 필수 명명 규칙 | 동작 | 접두사 | 금지 | |------|--------|------| | 조회 | **Find** | Get, Query, Retrieve | | 등록 | **Save** | Create, Add, Insert | | 수정 | **Modify** | Update, Edit, Change | | 삭제 | **Delete** | Remove, Erase | ### 정적 팩토리 메서드 - 신규 생성: `newXxx()` (예: `Family.newFamily(...)`) - 복원: `withId()` (예: `Family.withId(...)`) - 금지: `of()`, `create()`, `from()` ### 테스트 패턴 - 클래스: `@ExtendWith(MockitoExtension.class)` - Service: `@InjectMocks` + `@Mock` - 메서드명: snake_case (`{행동}_{결과}_{조건}`) ## 상세 지침 **[필수] 아래 참조 문서를 모두 읽은 후 작업을 시작하세요:** - **TDD 사이클**: [tdd-cycle.md](tdd-cycle.md) - **명명 규칙**: [naming.md](naming.md) - **아키텍처**: [architecture.md](architecture.md) - **코딩 스타일**: [coding.md](coding.md)