[박우빈, Practical Testing #3]TDD: Test Driven Development

dev_lee·2024년 11월 10일
post-thumbnail

TDD : Test Driven Development

프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정울 주도하도록 하는 방법론

Red Green Refactoring

TDD의 가장 핵심 방법이며, 개발 주기이다.

RED

실패하는 테스트 작성 (구현부 없이 테스트 코드를 작성하므로 무조건 실패하게 된다.)

GREEN

테스트 통과 최소한의 코딩(최대한 빠른 시간 내에 통과 가능한 코드 작성한다. 엉터리여도 된다.)

REFACTOR

테스트 통과 유지하면서 구현 코드 개선

예제

RED : 무조건 실패하는 테스트

// CafeKiosk.java
public int calculateTotalPrice() {
	return 0;
}
// CafeKioskTest.java
@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);
}

GREEN : 테스트 통과 최소한의 코딩

// CafeKiosk.java
public int calculateTotalPrice() {
	return 8500;
}

REFACTOR : 테스트 통과 유지하면서 구현 코드 개선

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

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

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

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

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

TDD는 클라이언트 관점에서의 피드백을 주는 Test Driven이다.


출처 - 박우빈, Practical Testing: 실용적인 테스트 가이드

0개의 댓글