TDD 1.0 Help

5장. 솔직히 말하자면

할일 목록
  • $5 + 10CHF = $10 (환율이 2:1로 가정)

  • $5 x 2 = $10

  • amount를 private으로 만들기

  • Dollar side effect?

  • Money 반올림?

  • equals()

  • hashCode()

  • Equal null

  • Equal object

  • 5CHF x 2 = 10CHF

위 목록중 첫 번째 테스트에 접근하기 위해서는 어떻게 해야할까? 우선 Franc을 표현할 수 있는 객체가 필요할 것이다. Franc 객체를 생성하기 전에 Dollar 테스트를 복사한 후 수정해보자.

@kotlin.test.Test fun testFrancMultiplication() { val five = Franc(5) assertEquals(Franc(10), five.times(2)) assertEquals(Franc(15), five.times(3)) }

위 테스트를 성공시키기 위해서는 어떻게 해야할까?

TDD의 단계를 다시 살펴보자.

  1. 테스트 작성

  2. 컴파일되게 하기

  3. 실패하는지 확인하기 위해 실행

  4. 실행하게 만듦

  5. 중복 제거

어차피 다섯 번째 단계 없이는 앞에 네 단계도 제대로 되지 않으니, 처음 네 단계를 빨리 진행할 때는 설계보다 속도를 중요시하자. 그런 후 적절한 시기에 적절한 설계를 돌아가게 만들고, 올바르게 만들자.

위 테스트코드를 컴파일되게 만들기 위해 Dollar 객체를 복사한 후 Franc으로 바꾸자.

class Franc(private var amount: Int) { fun times(multiplier: Int): Franc { return Franc(amount * multiplier) } override fun equals(other: Any?): Boolean { return amount == (other as Franc).amount } }
할일 목록
  • $5 + 10CHF = $10 (환율이 2:1로 가정)

  • $5 x 2 = $10

  • amount를 private으로 만들기

  • Dollar side effect?

  • Money 반올림?

  • equals()

  • hashCode()

  • Equal null

  • Equal object

  • 5CHF x 2 = 10CHF

  • Dollar/Franc 중복

  • 공용 equals

  • 공용 times

5장을 정리해보면

  • 큰 데스트를 공략할 수 없으니 작은 테스트를 만들었다.

  • 뻔뻔하게 중복을 만들고 조금 고쳐서 테스트를 작성했다.

  • 모델 코드까지 복사해서 테스트를 통과해버렸다.

  • 중복이 사라지기 전에는 다른 테스트를 시작하지 않기로 했다.

Last modified: 31 January 2024