@Test voidtestMultiplication(){ Dollar five = new Dollar(5); Dollar product = five.times(2); assertEquals(10, product.amount); product = five.times(3); assertEquals(15, product.amount); }
첫 번째 assertion 을 Dollar 와 Dollar 를 비교하는 것으로 재작성할 수 있다.
1 2 3 4 5 6 7 8
@Test voidtestMultiplication(){ Dollar five = new Dollar(5); Dollar product = five.times(2); assertEquals(new Dollar(10), product); product = five.times(3); assertEquals(15, product.amount); }
두 번째 assertion 도 마찬가지다.
1 2 3 4 5 6 7 8
@Test voidtestMultiplication(){ Dollar five = new Dollar(5); Dollar product = five.times(2); assertEquals(new Dollar(10), product); product = five.times(3); assertEquals(new Dollar(15), product); }
이제 임시 변수인 product는 필요없다.
1 2 3 4 5 6
@Test voidtestMultiplication(){ Dollar five = new Dollar(5); assertEquals(new Dollar(10), five.times(2)); assertEquals(new Dollar(15), five.times(3)); }
테스트를 고치고 나니, Dollar 의 amount 인스턴스 변수를 사용하는 코드는 Dollar 자신 밖에 없다. 따라서, 변수를 private 으로 변경 가능하다.
1
privateint amount;
동치성 테스트가, 동치성에 대한 코드가 정확히 동작하는 것을 검증하는데 실패하면다면 곱하기 테스트 역시, 곱하기에 대한 코드가 정확히 동작한다는 것을 검증하는데 실파헤가 된다. 이것은 TDD 를 하면서 적극적으로 관리해야할 위험 요소이다.