본문 바로가기
회고/TIL

[TIL] 2025.12.25 TDD에 대한 학습

by 세류오 2025. 12. 26.

TDD란 무엇인가?

TDD는 Test Driven Development로 "코드를 만들기 전, 먼저 어떻게 동작해야 하는지"를 테스트로 정의한다. 
테스트하는 순서는 아래와같다

Red -> Green -> Refactor
Red: 실패하는 테스트를 작성
Green: 최소 코드로 통과하는 테스트를 작성
Refactor: 구조를 정리

런던파와 고전파

런던파와 고전파는 다음으로 분류된다.

  • 테스트에서 어디까지를 믿고, 어디까지를 가짜로 만들 것 인가?

고전파

고전파의 핵심 철학은 테스트는 실제 객체들이 함께 잘 동작하는지 확인해야 한다 이다.

특징은 다음과 같다

  • 실제 객체를 사용
  • Mock을 거의 사용하지 않는다
  • 상태(State) 기반의 검증
  • 구현 변경에 덜 민감

실제 객체를 사용한다는 것은 진짜로 구현된 서비스 객체를 가져와서 사용하는 것이다

OrderService service = new OrderService(
    new OrderRepository(),
    new PaymentService()
);

service.placeOrder(order);

assertEquals(OrderStatus.COMPLETED, order.getStatus());

그렇다면 고전파는 왜 생긴것일까?

  • 원래 TDD의 초기 방식
  • 테스트는 실제 동작을 보장해야 한다는 생각
  • DB, 파일, 객체 간의 협업이 중요했던 시기
    이러한 것들이 맞물려서 생긴 방식이다

런던파

런던파의 핵심 철학은 "객체는 '역할과 협력'이 중요하다 이다.

특징은 다음과 같다.

  • Mock을 적극적으로 사용
  • 의존하는 객체는 전부 가짜로 대체한다.
  • 행위(Behavior)기반의 검증
  • 설계 주도적
OrderRepository repo = mock(OrderRepository.class);
PaymentService payment = mock(PaymentService.class);

OrderService service = new OrderService(repo, payment);

service.placeOrder(order);

verify(payment).pay(order);
verify(repo).save(order);

고전파와 런던파의 차이점 정리

◼︎ 테스트대상
고전파: 여러 객체
런던파: 하나의 객체

◼︎ 의존성
고전파: 실제 객체
런던파: 테스트 객체(Mock)

◼︎ 검증
고전파: 상태(State)
런던파: 행위(Behavior)

◼︎ 변경시 내성
고전파: 실제 객체를 사용함으로 높음
런던파: 테스트 객체를 사용함으로 낮음

◼︎ 테스트 속도
고전파: 실제 객체를 사용하는 만큼 느림
런던파: 테스트 객체를 사용하여 가볍고 빠름

'회고 > TIL' 카테고리의 다른 글

[TIL] 2025.12.19  (0) 2025.12.20
[TIL] 2025.12.18  (0) 2025.12.18
[TIL] 2025.12.10  (0) 2025.12.10
[TIL] 2025.09.30 화요일  (0) 2025.10.01