TDD의 결과는 작동하는 깔끔한 코드를 얻는 것이다.
작동하는 깔끔한 코드 를 만들기 위해 아래와 같이 나눠서 작업을 한다
- 작동하는 부분을 먼저 해결
- 깔끔한 코드 부분을 해결
- 빨리 성공하는 코드를 작성하기 위해 할 수 있는 전략
- 가짜로 구현하기 : 상수를 반환하게 만들고 진짜 코드를 얻을 때까지 단계적으로 상수를 변수로 변환
- 명백한 구현 사용하기 : 실제 구현을 입력
Dollar에 대한 연산(times)를 수행하고 나니 해당 Dollar의 값이 변경된다
Dollar의 값은 변경되서는 안된다
times에서 새로운 객체를 반환하게 한다
func testMultiplication() {
let dollar = Dollar(amount: 5)
dollar.times(multiplier: 2)
XCTAssertEqual(10, dollar.amount)
dollar.times(multiplier: 3)
XCTAssertEqual(15, dollar.amount)
}
테스트코드에서 별도의 변수를 만들어서 5달러를 유지하게 한다
func testMultiplication() {
let dollar = Dollar(amount: 5)
var product = dollar.times(multiplier: 2)
XCTAssertEqual(10, product.amount)
product = dollar.times(multiplier: 3)
XCTAssertEqual(15, product.amount)
}
컴파일을 하기 위해 0을 리턴하도록 작업한다
func times(multiplier: Int) -> Dollar {
amount *= multiplier
return Dollar(amount: 0)
}
위와 같이 하면 times는 항상 0을 리턴하기 때문에 실패하는 코드가 된다
times에서 올바른 금액을 리턴하도록 수정한다
func times(multiplier: Int) -> Dollar {
return Dollar(amount: amount * multiplier)
}
- 설계상의 결함(Dollar 부작용)을 그 결함으로 인해 실패하는 테스트로 변환
- 스텁 구현으로 빠르게 컴파일을 통과하도록 만듦
- 올바르다고 생각되는 코드를 입력하여 테스트 통과