Published on

[테스트 주도 개발] 1-2 타락한 객체

Authors
  • avatar
    Name
    Hyojeong Kim
    Twitter

1장 - 2. 타락한 객체

일반적인 TDD 주기

  1. 테스트를 작성한다. 원하는 인터페이스를 개발하라.
  2. 실행가능하게 만든다.
  3. 올바르게 만든다. 중복을 제거하라.

우리의 목적은 작동하는 깔끔한 코드를 얻는 것

[테스트 주도 개발] 다중통화를 지원하는 Money 객체 의 글에서 나온 테스트 코드 작업을 이어서 보자.

  • 할일 목록
$5 + 10CHT = $10(환율이 2:1일 경우)
$5 X 2 = $10 (해결 됨! Clear)
amount를 private로 만들기
Dollar 부작용? // 해결해야 할 문제
Money 반올림?

해결해야 할 문제

  • Dollar에 대해 연산 수행한 후에 해당 Dollar값이 바뀌고 있다.

시도해볼 수 있는 방법

  • times()에서 새로운 객체를 반환하도록 만들어서 원래의 값이 변하지 않도록 만드는 것
Dollar times(int multiplier){
    return new Dollar(amount * multiplier)
}

이렇게 하면 성공!

테스트를 빨리 성공시키는 법

  • 가짜로 구현하기 : 상수를 반환하게 만들고 진짜 코드를 얻을 때까지 단계적으로 상수를 변수로 바꾸어 간다.
  • 명백한 구현 사용하기 : 실제 구현을 입력한다.

지금까지 한일 정리

  • 설계상의 결함(Dollar 부작용)을 그 결함으로 인해 실패하는 테스트로 변환했다.
  • 스텁 구현으로 빠르게 컴파일을 통과하도록 만들었다.
  • 올바르다고 생각하는 코드를 입력하여 테스트를 통과했다.