Test Driven Development

Test Driven Development

TDD 기본 과정

RED-GREEN-REFACTOR

Test 코드 작성

@Test
void calculateTotalPrice() {
    CafeKiosk cafeKiosk = new CafeKiosk();
    Americano americano = new Americano();
    Latte latte = new Latte();

    cafeKiosk.add(americano);
    cafeKiosk.add(latte);

    int totalPrice = cafeKiosk.calculateTotalPrice();

    assertThat(totalPrice).isEqualTo(8500);
}

1. RED

public int calculateTotalPrice(){
    return 0;
}

2. GREEN

public int calculateTotalPrice(){
    return 8500;
}

3. REFACTOR

public int calculateTotalPrice() {
    return beverages.stream()
        .mapToInt(Beverage::getPrice)
        .sum();
}

구현순서

선 기능 구현 후 테스트 작성 문제점

  • 테스트 자체의 누락 가능성
  • 특정 테스트 케이스(해피 케이스)만 검증할 가능성
  • 잘못된 구현을 다소 늦게 발견할 가능성

선 테스트 작성, 후 기능 구현

  • 복잡도가 낮은, 테스트 가능한 코드로 구현할 수 있게 한다.(유연하며 유지보수가 쉬운)
  • 쉽게 발견하기 어려운 엣지 케이스를 놓치지 않게 해준다.
  • 구현에 대한 빠른 피드백을 받을 수 있다.
  • 과감한 리팩토링이 가능해진다.

TDD 관점의 변화

AS-IS 테스트는 구현부 검증을 위한 보조 수단

TO-BE 테스트와 상호 작용하며 발전하는 구현부


© 2023 Lee. All rights reserved.