[테스트 주도 개발] 1장_다중 통화를 지원하는 Money 객체
테스트 주도 개발의 리듬은 다음과 같다.
- 재빨리 테스트 하나 추가
- 모든 테스트 실행하고 새로 추가한 것이 실패한지 확인
- 코드를 조금 변경
- 모든 테스트 실행하고 전부 성공하는지 확인
- 리팩토링으로 중복 제거
어떤 테스트들이 있어야 보고서에 제대로 계산되도록 하는 코드가 완성됐다고 확신할 수 있을까 ?
- 통화가 다른 두 금액을 더해서 주어진 환율에 맞게 변환 금액을 결과로 얻을 수 있어야한다.
- 어떤 금액을 어떤 수에 곱한 금액을 결과로 얻을 수 있어야한다.
앞으로 어떤 일을 해야하는지 알려주고, 하는 일에 집중할 수 있게 하고, 언제 일이 끝나는지 알려 줄 수 있도록 할 일 목록을 만든다. 작업이 끝난 항목에는 줄을 긋는다.
할일 목록에서 볼 수 있듯이 곱하기를 먼저 다룬다. 작은 것부터 시작한다.
1 | public void testMultiplication() { |
위 테스트는 아직 컴파일조차 되지 않는다. 실행은 안되더라도, 컴파일만은 되도록 만들고 싶다. 네 개의 컴파일 에러가 있다.
- Dollar 클래스가 없음
- 생성자가 없음
- times(int) 메서드가 없음
- amount 필드가 없음
1 | class Dollar { |
위 코드에서 times(int multiplier) 는 stub 구현이다. 이 메서드를 호출하는 코드가 컴파일 될 수 있도록 껍데기만 만들어두는 것을 의미한다.
테스트를 다시 실행해보자. 실패한다. 테스팅 프레임워크가 결과로 10이 나와야 하는데 0이 나왔다는 것을 알려준다.