
프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정울 주도하도록 하는 방법론
TDD의 가장 핵심 방법이며, 개발 주기이다.
실패하는 테스트 작성 (구현부 없이 테스트 코드를 작성하므로 무조건 실패하게 된다.)
테스트 통과 최소한의 코딩(최대한 빠른 시간 내에 통과 가능한 코드 작성한다. 엉터리여도 된다.)
테스트 통과 유지하면서 구현 코드 개선
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();
}
TDD는 클라이언트 관점에서의 피드백을 주는 Test Driven이다.