TDD 1.0 Help

11장. 모든 악의 근원

할일 목록
  • $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

  • Franc과 Dollar 비교하기

  • 통화?

  • testFrancMultiplication 제거

class Dollar(amount: Int, currency: String) : Money(amount, currency) class Franc(amount: Int, currency: String) : Money(amount, currency)

두 하위 클래스 Dollar와 Franc에는 생성자 밖에 없다. 코드의 의미를 변경하지 않으면서 하위 클래스에 대한 참조를 상위 클래스에 대한 참조로 변경할 수 있다.

companion object { fun dollar(amount: Int): Money { return Money(amount, "USD") } fun franc(amount: Int): Money { return Money(amount, "CHF") } }
image_1580918951345.png

위처럼 Franc에 대한 참조는 하나도 남아있지 않지만 Dollar는 이전에 작성한 테스트 코드에서 아직 참조하고 있다.

@Test fun testDifferentClassEquality() { assertEquals(Money(10, "USD"), Dollar(10, "USD")) }

위 테스트를 지워도 될 정도로 동치성 테스트를 충분히 하고 있는지 살펴보자.

@kotlin.test.Test fun testEquality() { assertEquals(Money.dollar(5), Money.dollar(5)) assertNotEquals(Money.dollar(5), Money.dollar(6)) assertEquals(Money.franc(5), Money.franc(5)) assertNotEquals(Money.franc(5), Money.franc(6)) assertFalse(Money.franc(5) == Money.dollar(5)) }

충분한 것 같으니 Dollar를 참조하고 있는 테스트를 지우고, 기존 동치성 테스트에서 중복되는 단언도 제거하자.

@kotlin.test.Test fun testEquality() { assertEquals(Money.dollar(5), Money.dollar(5)) assertNotEquals(Money.dollar(5), Money.dollar(6)) assertNotEquals(Money.franc(5), Money.dollar(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

  • Dollar/Franc 중복

  • 공용 equals

  • 공용 times

  • Franc과 Dollar 비교하기

  • 통화?

  • testFrancMultiplication 제거

Last modified: 31 January 2024