김동형수 개발기

테스트 주도 개발 - 1부 15장 본문

책 스터디/[완료] 테스트 주도 개발

테스트 주도 개발 - 1부 15장

김동형수 2022. 9. 18. 16:56

15장 서로 다른 통화 더하기

 

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 + $5 = $10
  • $5 + $5에서 Money 반환하기
  • Bank.reduce(Money)
  • Money에 대한 통화 변환을 수행하는 Reduce
  • Reduce(Bank, String)

$5 + 10CHF에 대한 테스트 추가

 

원하는 테스트지만 컴파일 에러가 난다.

 

컴파일 에러는 해결 되었지만 테스트는 15USD가 나오기 때문에 실패한다.

 

Sum.reduce()가 인자를 축약하지 않는 것 같다. 그래서 인자를 모두 reduce하면 테스트는 통과한다.

이제 피가산수와 가산수는 Money -> Expression로 변경할 수 있다.

 

Money에서 plus, time에서 Money 타입을 Expression로 변경하면서 Expression이 plus, time 오퍼레이션을 포함해야 함을 제안하고 있다. 이제 테스트에서 나오는 plus의 인자도 바꿀 수 있다.

 

컴파일러가 Expression에 plus가 정의되지 않았다고 알려준다. 정의해주자.

그리고 Expression을 구현하는 Money, Sum에 plus메서드를 추가해야한다. Money의 plus메서드를 public으로 바꿔준다.

 

Sum의 plus구현을 스텁 구현으로 바꾸고, 할일 목록에 적어두자.

 

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 + $5 = $10
  • $5 + $5에서 Money 반환하기
  • Bank.reduce(Money)
  • Money에 대한 통화 변환을 수행하는 Reduce
  • Reduce(Bank, String)
  • Sum.plus
  • Expression.times

Money를 Expression으로 일반화하는 작업을 마무리할 준비가 되었다.

 

정리

  • 원하는 테스트를 작성하고, 한 단계에 달성할 수 있도록 뒤로 물렀다.
  • 좀 더 추상적인 선언을 통해 가지에서 뿌리로 일반화했다.
  • 변경 후, 그 영향을 받는 다른 부분들을 변경하기 위해 컴파일러의 지시를 따랐다.
Comments