본문 바로가기

TDD, CleanCode

클린코더스 강의 리뷰 5. TDD의 기본 예시

TDD는 다음과 같은 주기로 작성할 수 있다.

1. Red - 일단 만들어야 하는 코드를 작성한다.

2. Green - 최대한 빨리 (수단과 방법을 가리지 않고) 테스트를 작동할 수 있게 한다.

3. Refactor - 리팩토링한다.

 

예시를 살펴보자 

 

어떤 영화가 생성되고, 그 영화가 평점을 부여 받는다고 했을 때, 그 평점의 평균을 반환해야 하는 메소드를 만든다고 가정하자.

 

단계별로 나누면

1. 영화가 생성되고

2. 평점을 부여받고

3. 평점의 평균을 반환한다.

 

0. 일단 제대로 Test클래스가 생성 됬는지 확인

뭐 이런거 까지 해야 하나 싶은데, 그런게 TDD 아닐까 싶기도 하다. ㅋㅋ

 

1. 객체를 생성한다(영화를 생성한다)

< Red단계 >
< Green 단계 >

객체 생성과 같이 간단한 코드는 리팩토링 할 것이 없다. 이런 경우는 Refactor를 하지 않아도 무방하다.

이 때 함수의 이름을 주의하자

 

2. 평점을 부여 받는다.

< Red 단계 >
< Green 단계 >

테스트 케이스를 추가하자.

< return 0 이기 때문에 에러 >

메소드를 맞게 수정하자

3. 평점의 평균을 반환한다.

< Green >
< Red단계 이미지는 생략 됬다. 하지만 꼭 하자 >

테스트 케이스를 추가하자

이제서야 Rating을 의미있게 구현한다.

< 구현은 했지만 리팩토링이 필요하다. >

※ 리팩토링

< Movie 객체를 매번 만드는 것은 어색하다. >

처음엔 테스트 케이스도 리팩토링 해야 한다는 사실에 놀랐다.

여하튼 다음과 같이 바꿀 수 있다.

 

< Movie 객체 생성을 field변수로 생성 >
추가적으로 평점 0점을 주는 테스트에서 생성시 0점으로 시작하는 메소드로 바꾸었다.

 

끝이고, 간단하지만 정말 중요하다고 생각이 든다.