- .claude/rules/: 팀 정책, Git 워크플로우, 코드 스타일, 네이밍, 테스트 규칙 - .claude/skills/: init-project, sync-team-workflow, create-mr, fix-issue - .claude/settings.json: deny 규칙 + hooks - .claude/workflow-version.json: v1.2.0 적용 - .githooks/: commit-msg(grep -P→-E macOS 호환), pre-commit, post-checkout - .editorconfig, .sdkmanrc, .mvn/settings.xml (Nexus 미러) - .gitignore: .claude/ 팀 파일 추적 전환 - CLAUDE.md: 프로젝트 루트로 이동 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
Java 테스트 규칙
테스트 프레임워크
- JUnit 5 + AssertJ 조합
- Mockito로 의존성 모킹
- Spring Boot Test (
@SpringBootTest) 는 통합 테스트에만 사용
테스트 구조
단위 테스트 (Unit Test)
- Service, Util, Domain 로직 테스트
- Spring 컨텍스트 로딩 없이 (
@ExtendWith(MockitoExtension.class)) - 외부 의존성은 Mockito로 모킹
@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 사용