- CLAUDE.md: Java/Spring Boot/Maven 프로젝트 가이드 - .claude/settings.json: Maven 빌드 도구 권한 설정 - .claude/rules/: Java 코드 스타일, 네이밍, 테스트 규칙 - .githooks/pre-commit: Maven 컴파일 검증 - .mvn/settings.xml: Nexus 프록시 레포지토리 미러 - .sdkmanrc: JDK 17 버전 고정
63 lines
1.9 KiB
Markdown
63 lines
1.9 KiB
Markdown
# Java 테스트 규칙
|
|
|
|
## 테스트 프레임워크
|
|
- JUnit 5 + AssertJ 조합
|
|
- Mockito로 의존성 모킹
|
|
- Spring Boot Test (`@SpringBootTest`) 는 통합 테스트에만 사용
|
|
|
|
## 테스트 구조
|
|
|
|
### 단위 테스트 (Unit Test)
|
|
- Service, Util, Domain 로직 테스트
|
|
- Spring 컨텍스트 로딩 없이 (`@ExtendWith(MockitoExtension.class)`)
|
|
- 외부 의존성은 Mockito로 모킹
|
|
|
|
```java
|
|
@ExtendWith(MockitoExtension.class)
|
|
class UserServiceTest {
|
|
@InjectMocks
|
|
private UserService userService;
|
|
|
|
@Mock
|
|
private UserRepository userRepository;
|
|
|
|
@Test
|
|
@DisplayName("사용자 생성 시 정상 저장")
|
|
void createUser_withValidInput_savesUser() {
|
|
// given
|
|
// when
|
|
// then
|
|
}
|
|
}
|
|
```
|
|
|
|
### 통합 테스트 (Integration Test)
|
|
- Controller 테스트: `@WebMvcTest` + `MockMvc`
|
|
- Repository 테스트: `@DataJpaTest`
|
|
- 전체 플로우: `@SpringBootTest` (최소화)
|
|
|
|
### 테스트 패턴
|
|
- **Given-When-Then** 구조 사용
|
|
- 각 섹션을 주석으로 구분
|
|
- 하나의 테스트에 하나의 검증 원칙 (가능한 범위에서)
|
|
|
|
## 테스트 네이밍
|
|
- 메서드명: `{메서드}_{시나리오}_{기대결과}` 패턴
|
|
- `@DisplayName`: 한국어로 테스트 의도 설명
|
|
|
|
## 테스트 커버리지
|
|
- 새로 작성하는 Service 클래스: 핵심 비즈니스 로직 테스트 필수
|
|
- 기존 코드 수정 시: 수정된 로직에 대한 테스트 추가 권장
|
|
- Controller: 주요 API endpoint 통합 테스트 권장
|
|
|
|
## 테스트 데이터
|
|
- 테스트 데이터는 테스트 메서드 내부 또는 `@BeforeEach`에서 생성
|
|
- 공통 테스트 데이터는 TestFixture 클래스로 분리
|
|
- 실제 DB 연결 필요 시 H2 인메모리 또는 Testcontainers 사용
|
|
|
|
## 금지 사항
|
|
- `@SpringBootTest`를 단위 테스트에 사용 금지
|
|
- 테스트 간 상태 공유 금지
|
|
- `Thread.sleep()` 사용 금지 → `Awaitility` 사용
|
|
- 실제 외부 API 호출 금지 → WireMock 또는 Mockito 사용
|