두 하위 클래스에는 이제 생성자밖에 없다. 제거하자.
코드의 의미를 변경하지 않으면서 하위 클래스에 대한 참조를 상위 클래스에 대한 참조로 변경할 수 있다.
1 2 3 4 5 6 7 8
| static Money dollar(int amount) { return new Money(amount, "USD"); }
static Money franc(int amount) { return new Money(amount, "CHF"); }
|
이제 Dollar 에 대한 참조가 하나도 없으므로 지울 수 있다. 하지만, Franc 는 테스트 코드에서 아직 참조한다.
1 2 3 4
| @Test public void testDifferentClassEquality() { assertTrue(new Money(10, "CHF").equals(new Franc(10, "CHF"))); }
|
이 테스트를 지워도 될 정도로 다른 곳에서 이미 동치성 테스트를 충분히 하고 있는가 ?
1 2 3 4 5 6 7 8
| @Test void testEquality() { assertTrue(Money.dollar(5).equals(Money.dollar(5))); assertFalse(Money.dollar(5).equals(Money.dollar(6))); assertTrue(Money.franc(5).equals(Money.franc(5))); assertFalse(Money.franc(5).equals(Money.franc(6))); assertFalse(Money.franc(5).equals(Money.dollar(5))); }
|
3, 4 단언은 1, 2 단언과 중복이다. 지우자.
1 2 3 4 5 6
| @Test void testEquality() { assertTrue(Money.dollar(5).equals(Money.dollar(5))); assertFalse(Money.dollar(5).equals(Money.dollar(6))); assertFalse(Money.franc(5).equals(Money.dollar(5))); }
|
테스트 주도 개발 <켄트 벡>