📖

【学習備忘録】(Swift)TDDでポーカーを実装(STEP1)

2022/05/20に公開

はじめに

「Swiftで書いておぼえるTDD」のポーカーアプリのコードをもとに学習しました。
TDDでポーカーアプリを実装します。

サンプルコード

0. 今回実装すること

  • Cardを定義し、インスタンスを作成する。
     - suitは、ハート・スペード・クラブ・クローバーを持っています。
     - rankは、1からking(13)の数字を持っています。
  • 今回は、Cardのインスタンスを作成したときに、SuitとRankが意図したものとなっているかどうかを確認していきます。

1. テストケースをかく

  • まず、テストを実行しエラーを確認。
class Practice_TDD_PokerTests: XCTestCase {
    func testInitializeCard() {
        let card = Card(suit: .heart, rank: .three)
        XCTAssertEqual(card.suit, .heart)
        XCTAssertEqual(card.rank, .three)
    }
}

もちろん、テスト対象であるCardを定義していないので、エラーが出ます。

2. Cardの定義をする

  • とりあえず、テストが通るようにCardの構造体を用意します。
struct Card {
    enum Suit {
        case heart
    }

    enum Rank {
        case three
    }

    let suit: Suit
    let rank: Rank
}

再度、テストを実行すると成功します。

3. 他のテストケースを追加

  • heartとthree以外でも成功するか、テストケースを追加。
class Practice_TDD_PokerTests: XCTestCase {
    func testInitializeCard() {
        let card1 = Card(suit: .heart, rank: .three)
        XCTAssertEqual(card1.suit, .heart)
        XCTAssertEqual(card1.rank, .three)

        let card2 = Card(suit: .spade, rank: .jack)
        XCTAssertEqual(card2.suit, .spade)
        XCTAssertEqual(card2.rank, .jack)
    }
}

Cardには、.spadeと.jackを定義していないため、失敗する。

4. Cardの定義を完成させる。

  • heartとthree以外でも成功するか、テストケースを追加。
struct Card {
    enum Suit {
        case spade
        case heart
        case club
        case diamond
    }

    enum Rank {
        case ace
        case two
        case three
        case four
        case five
        case six
        case seven
        case eight
        case nine
        case ten
        case jack
        case queen
        case king
    }

    let suit: Suit
    let rank: Rank
}

これで、テストを実行し成功すれば、他のパターンにおいてもCardがsuitとrankを保持することが保証されます。

GitHub

https://github.com/MasakatsuTagishi/Practice-TDD-Poker/tree/step1

参考にしたもの

1.Swiftで書いておぼえるTDD

https://www.amazon.co.jp/Swiftで書いておぼえるTDD-技術書典シリーズ(NextPublishing)-田中-賢治/dp/484439858X

さいごに

実際に業務で追加機能を実装をしたときに、コードを読み解くだけでものすごい時間がかかりました。
その経験からメンテナンスのしやすさというのは、後々の改修に大きな影響を与えるものだと思っています。
今回、TDDの入門ですが、とてもワクワクしながら勉強しています。
間違いや認識違いがあれば指摘いただければ幸いです。

Discussion