TDD 주기는 다음과 같다.
목적은 작동하는 깔끔한 코드를 얻는 것이다.
하지만 그것은 도달하기 힘들기 때문에 나누어서 정복하자 (divide and conquer)
일단 ‘작동’ 하게 만들고 → ‘깔끔한 코드’ 부분을 해결해라.
‘깔끔한 코드’ 부분을 해결한 후에 ‘작동하는’ 부분을 해결해 나가면서 배운 것들을 설계에 반영하느라 허둥거리는 아키텍처 주도 개발 (architecture-driven development)과는 정 반대다.
[목록]
Dollar side effect:
@Test
void testMultiplication() {
Dollar five = new Dollar(5);
five.times(2);
assertThat(five.amount).isEqualTo(10);
five.times(3);
assertThat(five.amount).isEqualTo(15);
}
위 방법에서 test()
에서 새로운 객체를 반환하게 하면 어떨까?