TDD 점검
Language
모든 응답은 한국어로 작성한다.
목적
- •TDD 흐름(실패 테스트 → 최소 구현 → 리팩터링)을 강제한다.
- •단위테스트와 통합테스트의 범위를 분리하고, 코드베이스 패턴을 따른다.
빠른 절차
- •변경 범위 식별
- •어떤 모듈/유스케이스/어댑터가 바뀌는지 명확히 한다.
- •테스트 유형 결정
- •순수 비즈니스 로직/유틸/정책 검증이면 단위테스트.
- •Spring 컨텍스트, DB/JPA, MQ/Testcontainers 필요하면 통합테스트.
- •실패 테스트 먼저 작성
- •기대 결과와 실패 조건을 먼저 고정한다.
- •테스트가 실패하는 것을 확인한다.
- •최소 구현
- •테스트를 통과시키는 최소 변경만 한다.
- •리팩터링
- •중복 제거, 네이밍 정리, 구조 개선.
- •테스트는 계속 통과해야 한다.
- •점검
- •단위/통합 테스트 위치와 의존이 올바른지 확인한다.
코드베이스 관찰 패턴
단위테스트 패턴
- •위치:
src/test/java. - •Spring 없이 직접 인스턴스 생성, fake/record로 의존 대체.
- •예외/에러 케이스 중심의 AAA 구조.
- •JUnit Jupiter + AssertJ/Assertions 사용.
통합테스트 패턴
- •위치:
src/integrationTest/java. - •DB/JPA 통합은
@DataJpaTest기반. - •기능의 full life cycle을 점검할때는
@SpringBootTest+ Testcontainers 사용.
분류 원칙
- •단위테스트에 Spring 컨텍스트 로딩 금지.
- •통합테스트는 실제 인프라 또는 Spring 설정 검증에만 사용.
- •단위 성격 테스트를 integrationTest에 두지 않는다.
단위테스트 체크리스트
- •테스트 대상은 순수 로직이며 외부 인프라 의존이 없다.
- •의존성은 fake/record로 대체한다.(mockito 자제)
- •실패 조건과 예외 메시지를 명확히 검증한다.
- •테스트는 빠르고 독립적이다.
통합테스트 체크리스트
- •Spring 컨텍스트/DB/MQ 연동이 실제로 필요하다.
- •테스트는 최소 시나리오만 검증한다.
- •Testcontainers 사용 시 컨테이너 설정이 명확하다.
- •실행 시간이 길어지는 테스트는 최소화한다.
산출물 템플릿
- •테스트 계획:
- •단위테스트: <대상/검증 포인트>
- •통합테스트: <대상/검증 포인트>
- •실패 조건:
- •<실패 케이스 목록>
- •구현 단계:
- •
- •실패 테스트 작성
- •
- •최소 구현
- •
- •리팩터링
- •
- •확인:
- •<실행할 테스트/태스크>
비고
- •테스트 파일 위치를 엄격히 구분한다.
- •필요 이상으로 통합테스트를 늘리지 않는다.
- •가능한 test context를 최소화한다.