1
0
template-java-maven/.claude/rules/testing.md
Team Workflow Bot 0b1ddc96bb chore: Java Maven 프로젝트 템플릿 초기 구성
- CLAUDE.md: Java/Spring Boot/Maven 프로젝트 가이드
- .claude/settings.json: Maven 빌드 도구 권한 설정
- .claude/rules/: Java 코드 스타일, 네이밍, 테스트 규칙
- .githooks/pre-commit: Maven 컴파일 검증
- .mvn/settings.xml: Nexus 프록시 레포지토리 미러
- .sdkmanrc: JDK 17 버전 고정
2026-02-14 08:20:39 +09:00

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 사용