1부 5장 솔직히 말하자면

김희윤·2021년 4월 1일
0

테스트주도개발

목록 보기
5/16

< 현재 구현해야할 목록 >

  • $5 + 10CHF = $10 (환율이 2:1일 경우)
  • $5 * 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용
  • Money 반올림
  • equals()
  • hashCode()
  • Equal null
  • Equal object

첫번째 할 일을 구현해보자

달러 객체와 비슷하지만 Franc을 표현할 수 있는 객체가 필요하다.

우선 Dollar 테스트를 복사한 후 수정해보자.

@Test
public void testFrancMultiplication() {
        Franc five = new Franc(5);
        assertEquals(new Franc(10), five.times(2));
        assertEquals(new Franc(15), five.times(3));
}

당연히 Franc class가 없기 때문에 에러가 뜬다. 이를 해결하기 위해서 Dollar class 를 복사해서 이름만 바꿔보자.

물론! 최악의 수라는 것은 안다. 하지만 앞에서도 언급한 것처럼 테스트의 과정은

  1. 테스트 작성
  2. 컴파일되게 하기
  3. 실패하는지 확인하기 위해 실행
  4. 실행하게 만듦
  5. 중복 제거

의 순으로 이루어 지기 때문에 현재까지 클린코드는 중요하지 않다.

public class Franc {
    private int amount;

    public Franc(int amount) {
        this.amount = amount;
    }

    public Franc times(int multiplier) {
        return new Franc( amount * multiplier);
    }

    public boolean equals(Object object) {
        Franc franc = (Franc) object;
        return amount == franc.amount;
    }
}

< 현재 구현해야할 목록 >

  • $5 + 10CHF = $10 (환율이 2:1일 경우)
  • $5 * 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용
  • Money 반올림
  • equals()
  • hashCode()
  • Equal null
  • Equal object
  • ~~ 5CHF * 2 = 10CHF~~
  • Dollar/Franc 중복제거
  • 공용 equals
  • 공용 times

지금까지 한 일을 검토해보면

  • 큰 테스트를 공략할 수 없기에 작은 테스트부터 시작했다.
  • 뻔뻔하게 중복을 만들고 조금 고쳐서 테스트를 작성했다.
  • 설상가상으로 모델 코드가지 복사하고 수정해서 테스트를 통과했다.
  • 중복이 사라지게 하겠다고 마음먹었다.
profile
블록체인, IOT, 클라우드에 관심이 많은 개발자 지망생

0개의 댓글

관련 채용 정보