Spring Boot 환경에서 설명하는 TDD 관련 책을 읽어 본다면 고전파와 런던파에 대한 설명이 자주 언급되어 관련 내용을 간단히 정리하고자 한다.
요약
| 구분 | 고전파 | 런던파 |
| 테스트 방식 | 실제 객체 많이 사용 | 의존 객체를 Mock으로 대체 |
| 검증 방식 | 상태(State) 검증 | 행위(Interaction) 검증 |
| 철학 | 결과 중심 | 협력 관계 중심 |
SpringBoot + Mock 환경에서 런던파 장점
1. 테스트 속도가 빠름
- DB 안 붙임
- 외부 API 호출 안 함
- 실제 Bean 전체 로딩 안 함
@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
@Mock OrderRepository orderRepository;
@InjectMocks OrderService orderService;
}
→ @SpringBootTest 안 써도 됨
→ CI(= Continuous Integration (지속적 통합)) 에서 훨씬 빠름
2. 단위 테스트가 진짜 “단위”가 됨
고전파는 종종:
- Service + Repository + DB 같이 묶임
런던파는:
- Service만 테스트
- Repository는 Mock
→ 의존성 끊고 진짜 로직만 검증 가능
3. 협력 관계 설계가 좋아짐 🧠
런던파는 이런 걸 검증함:
verify(orderRepository).save(any());
즉:
- 이 객체가
- 이 의존성을
- 정확히 이렇게 호출했는가?
→ 자연스럽게 의존성 역전, 인터페이스 기반 설계가 강제됨
결과적으로:
- 결합도 낮아짐
- 테스트 가능한 구조가 됨
- SOLID 지키게 됨
4. 에러 상황 테스트가 쉬움
예:
when(paymentClient.pay(any()))
.thenThrow(new RuntimeException());
고전파에서는:
- 실제 API 실패 상황 만들기 어려움
런던파에서는:
- 예외 상황 쉽게 재현 가능
→ 예외 처리 테스트가 매우 쉬움
5. TDD에 더 잘 맞음
런던파는:
- 인터페이스 정의
- Mock 기반으로 테스트 먼저 작성
- 구현
→ TDD 스타일에 잘 맞음
SpringBoot 환경에서 특히 좋은 경우
- 외부 API 연동 많음 (결제, 문자, 인증 등)
- DB 의존 로직 많음
- 마이크로서비스 구조
- 도메인 로직 복잡함
- 빠른 CI/CD 필요
단점도 있음
1. 테스트가 구현에 의존함
verify(repository).save()
→ 내부 구현 바꾸면 테스트 깨짐
(고전파는 결과만 맞으면 통과)
2. 리팩토링 저항성 낮음
행위 검증 위주라
→ 메서드 호출 순서 바꾸면 깨짐
3. 과도한 Mock은 오히려 가짜 안정감
실제 통합 문제는 못 잡음
그래서 통합 테스트는 별도로 필요
결론 (SpringBoot 기준)
실무에서 가장 좋은 구조는
단위 테스트 = 런던파 (Mock 기반)
통합 테스트 = 고전파 (실제 Bean + DB)
이렇게 혼합하는 것
한 줄 요약
SpringBoot + Mock 환경에서 런던파 장점은:
- 빠름
- 진짜 단위 테스트 가능
- 설계 품질 향상
- 예외 테스트 쉬움
- TDD 친화적
'SpringBoot > TDD' 카테고리의 다른 글
| TestCode Bean 객체 주입에 관련 하여 (0) | 2025.02.11 |
|---|

