Skip to content

Latest commit

 

History

History
62 lines (51 loc) · 2.01 KB

02.md

File metadata and controls

62 lines (51 loc) · 2.01 KB

TDD Study - 02. 타락한 객체

TDD의 결과는 작동하는 깔끔한 코드를 얻는 것이다.

작동하는 깔끔한 코드 를 만들기 위해 아래와 같이 나눠서 작업을 한다

  1. 작동하는 부분을 먼저 해결
  2. 깔끔한 코드 부분을 해결
  • 빨리 성공하는 코드를 작성하기 위해 할 수 있는 전략
    • 가짜로 구현하기 : 상수를 반환하게 만들고 진짜 코드를 얻을 때까지 단계적으로 상수를 변수로 변환
    • 명백한 구현 사용하기 : 실제 구현을 입력

1. 테스트 추가

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)
}

2. times 메소드 수정

테스트코드에서 별도의 변수를 만들어서 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)
}

3. 작업한 내용

  • 설계상의 결함(Dollar 부작용)을 그 결함으로 인해 실패하는 테스트로 변환
  • 스텁 구현으로 빠르게 컴파일을 통과하도록 만듦
  • 올바르다고 생각되는 코드를 입력하여 테스트 통과