티스토리 뷰

728x90
반응형

그동안 대부분 구글(?)로 공부했었지만, 더욱 멋진 개발자가 되기위해 요즘 책을 읽고있습니다👏🏻
책 내용 전부를 정리하는 것이 아닌, TDD 예시에 대해서만 집중적으로 연습해보려고 해요!

📚 책 정보

📖 Test-Driven Development: By Example (테스트 주도 개발)
✍🏻 Kent Beck 지음 / 김창준, 강규영 옮김
🏢 인사이트 (insight)

다중 통화를 지원하는 Money 객체

요구 사항

  • 어떤 금액을 어떤 수에 곱한 금액을 결과로 얻을 수 있어야 한다

🔴 RED

func test_어떤_금액을_어떤_수에_곱한_금액을_결과로_얻을_수_있어야_한다() {
    // 선언 및 초기화
    let fiveDoller = Doller(amount: 5)

    // 곱셈
    fiveDoller.multiply(by: 2)

    // 곱셈이 잘 되는지 확인
    XCTAssertEqual(5*2, fiveDoller.amount)
}

진행 상황

  • 테스트에 대해 필요한 것을 단지 코드로만 작성했습니다.
  • Doller클래스가 없습니다.
  • 따라서, amount, multiply(by: Int)가 없습니다.

🟢 GREEN

class Doller {

    var amount: Int

    init(amount: Int) {
        self.amount = amount
    }

    func multiply(by multiplier: Int) {
        self.amount *= multiplier
    }
}
func test_어떤_금액을_어떤_수에_곱한_금액을_결과로_얻을_수_있어야_한다() {
    // 선언 및 초기화
    let fiveDoller = Doller(amount: 5)

    // 곱셈
    fiveDoller.multiply(by: 2)

    // 곱셈이 잘 되는지 확인
    XCTAssertEqual(5*2, fiveDoller.amount)
}

진행 상황

  • Doller클래스를 추가하였습니다.

🔵 REFACTOR

class Doller {

    private var sumOfMoney: Int

    init(amount: Int) {
        self.sumOfMoney = amount
    }

    func multiply(by multiplier: Int) {
        self.sumOfMoney *= multiplier
    }
    func amount() -> Int {
        self.sumOfMoney
    }
}
func test_어떤_금액을_어떤_수에_곱한_금액을_결과로_얻을_수_있어야_한다() {
    // 선언 및 초기화
    let fiveDoller = Doller(amount: 5)

    // 곱셈
    fiveDoller.multiply(by: 2)

    // 곱셈이 잘 되는지 확인
    XCTAssertEqual(5*2, fiveDoller.amount())
}

진행 상황

  • 금액에 접근제한자를 추가하였습니다.
  • 함수 amount()를 추가하였습니다.

🤦🏻‍♂️ 회고

느낀 점

  • 완전 별거아닌 테스트인데, 생각보다 오래걸렸어요..😅

아쉬웠던 점

  • 금액에 대해 private처리를 하면서 get처리를 해줘야했고, 그에따른 함수를 만들어주면서 네이밍을 변경했어요. 근데 sumOfMoney이 네이밍이 마음에 들지가 않아요😢

😎 마무리

전체 코드는 강경의 github에 나와있습니다. 이번 게시글은 강경의 github Issue에서도 확인할 수 있어요😁
이해가 안되는 부분이나, 틀린 부분이 있으면 코멘트를 남겨주세요!
피드백은 정말정말 환영입니다🎉🎉

728x90
반응형

'TDD' 카테고리의 다른 글

[Swift] 테스트 주도 개발 (켄트 백) - 타락한 객체  (0) 2022.01.27
TDD  (1) 2021.08.26