프로그래밍/스프링

Test Driven Development

스루나루 2024. 6. 25. 00:49
728x90
728x90

 

서론

 

Test Driven Development 란?

- 구현먼저 하는 것이 아니라 테스트를 먼저하고 기능을 구현하는 개발 방법론 

 

1) 실패하는 테스트 작성 

2) 테스트 통과 최소한의 코딩 : 통과하기 위해 막 짜도 괜찮 일단 통과만 하도록 짜라

3) 구현 코드 개선 , 테스트 통과 유지 : 구현 코드를 개선하면서 품질 향상 

 

 

본문 

 

1단계 - 빨간불 보기 

// 컴파일 에러 방지용 기능 구현 
public int calculateTotalPrice(){
    return 0;
}

// 빨간색 불 들어오는 테스트코드
@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);

}

 

 

2단계 - 최대한 빠르게 초록불 만들기

    public int calculateTotalPrice(){
        return 8500;
    }

 

3단계 - 리펙토링 

    public int calculateTotalPrice(){
        int totalPrice = 0 ;
        for(Beverage beverage : beverages){
            totalPrice += beverage.getPrice();
        }
        return  totalPrice;

    }

 

 

요렇게 한 사이클임 

 

더 과감하게 구현부 다 바꿀 수도 있음 

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

 

이렇게 스트림으로 구현부 전체 다 바꿔도 테스트코드에서 정상 뜨는 걸 확인할 수 있으니 과감하게 변경하는 것도 손쉽게 할 수 있음

 

 

TDD의 핵심 가치 - 피드백 

 

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

- 테스트 자체 누락 가능성 

- 특정 케이스 ( 해피 케이스 )만 검증할 가능성 

- 잘못된 구현을 다소 늦게 발견할 가능성 

 

선 테스트 작성 후 기능 구현 

- 복잡도가 낮은 ( 유연하고 유지보수가 쉬운 )테스트 가능한 코드로 구현할 수 있게 해준다

- 쉽게 발견하기 어려운 엣지 케이스를 발견할 수 있음

- 구현에 대한 빠른 피드백 받을 수 있음 : 녹불 , 빨간불

- 과감한 리팩토링이 가능해짐 - 바로 테스트가 보장해주니까 

 

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

 

 

참고

 

https://www.inflearn.com/course/practical-testing-%EC%8B%A4%EC%9A%A9%EC%A0%81%EC%9D%B8-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B0%80%EC%9D%B4%EB%93%9C/dashboard

 

 

728x90
728x90