-
테스트 주도 개발의 목표는 작동하는 깔끔한 코드를 작성하는 것
- 예측 불가능한 끊임없이 발생하는 버그에 대해 걱정하지 않아도 된다.
- 일이 언제 마무리될지 알 수 있다.
- 코드가 가르쳐주는 교훈을 배울 기회를 갖게 된다.
처음 생각나는 대로 빨리 완료해버리면 더 나은 것에 대해 생각할 기회를 잃게 된다.
테스트 주도 개발 규칙
- 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
(새로운 코드를 추가하려면 테스트를 먼저 작성해라)
- 중복을 제거한다.
TDD 프로그래밍 순서
- 빨강 - (처음 작성 시에는 컴파일 조차 되지 않는) 실패하는 작은 테스트를 작성한다.
- 초록 - 빨리 테스트가 통과하게끔 만든다. 이를 위해 어떤 죄악(상수 값 입력 등..)을 저질러도 좋다.
- 리팩토링 - 일단 테스트를 통과하게만 하는 와중에 생겨난 모든 중복을 제거한다.
할 일 목록을 작성하자
$5 + 10CHF = $10
$5 * 2 = $10
amount를 private으로 만들기
- 앞으로 어떤 일을 해야 하는지 알 수 있다.
- 현재 하는 일에 집중해서 진행할 수 있다.
- 언제 일이 다 끝나는지 알 수 있다.
TDD 주기
- 하나의 작은 단위의 테스트 코드를 작성한다.
- 모든 테스트를 실행해서 테스트가 실패하는 것을 확인한다.
- 테스트가 통과될 때까지 코드를 수정한다.
- 중복을 제거하기 위해 리팩토링을 한다.
- 리팩토링한 코드를 다시 테스트한다.
- 통과될 때까지 리팩토링한 코드를 수정한다.
- 테스트가 통과되면 테스트 케이스에 있는 다음 테스트 코드를 작성한다.
중복된 코드 제거
테스트 코드
Dollar five = new Dollar(5);
five.times(2);
assertEquals(10, five.amount);
리팩토링 전 코드
int amount = 5 * 2;
리팩토링 후 코드
Dollar(int amount) {
this.amount = amount;
}
void times(int multiplier) {
amount *= multiplier;
}
테스트와 코드 사이에 존재하는 중복도 제거 해야한다.