1부 1장 다중 통화를 지원하는 Money 객체
0. 들어가며
주식 거래소를 운영하고 있다고 가정한다. 현재는 USD만 지원하지만 Franc도 지원하게 수정하고 싶다. 앞으로의 과정들은 이것을 설명한다.
- 목록에서 구현을 시작하는 부분은 굵게,
끝난 부분은 줄을 그을 것이다.
< 현재 구현해야할 목록 >
- $5 + 10CHF = $10 (환율이 2:1일 경우)
- $5 * 2 = $10
- amount를 private로 만들기
- Dollar 부작용
- Money 반올림
-> 통화가 다른 두 금액을 더해서 주어진 환율에 맞게 변한 금액을 결과로 얻을 수 있어야 한다.
-> 주가를 주식의 수에 곱한 금액을 결고로 얻을 수 있어야 한다.
1. 간단한 곱셈
public void testMultiplication() {
Dollar five = new Dollar();
five.times(2);
assertEquals(10, five.amount);
}
- Dollar class 없음
- 생성자가 없음
- times(int) method 없음
- amount 필드 없음
Dollar class를 만들어서 위의 오류를 잡는다.
public class Dollar {
public int amount;
public Dollar(int amount) {
}
public void times(int multiplier) {
}
}
오류는 모두 잡혔고 실행한다면 에러가 발생한다. 우리는 10을 바랐지만 값은 0으로 나왔다. 우선 테스트를 통과하기 위해서 아래와 같이 수정한다.
public class Dollar {
public int amount = 10;
public Dollar(int amount) {
}
public void times(int multiplier) {
}
}
테스트를 통과함을 볼 수 있다!
주기는 아래와 같다.
- 작은 테스트를 하나 추가한다.
- 모든 테스트를 실행해서 테스트가 실패하는 것을 확인한다.
- 조금 수정한다.
- 모든 테스트를 실행해서 테스트가 성공하는 것을 확인한다.
- 중복을 제거하기 위해 리팩토링한다.
public class Dollar {
public int amount;
public Dollar(int amount) {
this.amount = amount;
}
public void times(int multiplier) {
amount *= multiplier;
}
}
위와 같이 리팩토링하면 중복을 제거하고 변하는 값에 따라서 원하는 값을 얻을 수 있게 되었다.
우리가 진행한 작업은 다음과 같다.
- 작업해야 할 테스트 목록을 만들었다.
- 오퍼레이션이 외부에서 어떻게 보이길 원하는지 말해주는 이야기를 코드로 표현
- JUnit에 대한 상세한 사항은 잠시 무시
- 스텁 구현을 통해 테스트를 컴파일
- 끔찍한 죄악을 범하여 테스트만 통과
- 상수를 변수로 변경해서 일반화
- 할일을 한번에 처리하는 대신 목록에 추가만 함
Author And Source
이 문제에 관하여(1부 1장 다중 통화를 지원하는 Money 객체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@miiunii/테스트주도개발-1부-1장-다중-통화를-지원하는-Money-객체저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)