[테스트 주도 개발] 11장_모든 악의 근원

두 하위 클래스에는 이제 생성자밖에 없다. 제거하자.

코드의 의미를 변경하지 않으면서 하위 클래스에 대한 참조를 상위 클래스에 대한 참조로 변경할 수 있다.

1
2
3
4
5
6
7
8
//Money
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))); // 1
assertFalse(Money.dollar(5).equals(Money.dollar(6))); // 2
assertTrue(Money.franc(5).equals(Money.franc(5))); // 3
assertFalse(Money.franc(5).equals(Money.franc(6))); // 4
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)));
}

테스트 주도 개발 <켄트 벡>

Comments