📖
【学習備忘録】(Swift)TDDでポーカーを実装(STEP1)
はじめに
「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
参考にしたもの
1.Swiftで書いておぼえるTDD
さいごに
実際に業務で追加機能を実装をしたときに、コードを読み解くだけでものすごい時間がかかりました。
その経験からメンテナンスのしやすさというのは、後々の改修に大きな影響を与えるものだと思っています。
今回、TDDの入門ですが、とてもワクワクしながら勉強しています。
間違いや認識違いがあれば指摘いただければ幸いです。
Discussion