ルビーでカードベースのゲームを開発したいと思います。TDDでやってみたいと思います。依存関係のある被験者をテストするには?
私が書きたい最初のクラスは、プレーヤーです。 各プレイヤーはのハンドと13枚のカードを持ち、そのターンに1枚のカードを選択してプレーできる。
私は(、カードのような、手...)他のクラスを開発していない、私は他のクラスに依存しているこのテーマをテストする方法を知りたいですか?
私はモックを知っているが、私はそれらを使用することができますかわかりません。
例えば、このシナリオでは、プレーヤーがのカードをプレイしたときに、そのカードを自分の手札から取り除く必要があることを知っています。
これは私のコードです:
require "rspec"
require "lib/player"
describe Player do
before(:each) do
hand=mock("Hand")
hand.should_receive(:count).and_return(13)
subject.hand=hand
end
it "should choose and play a card from her/his hand" do
subject.hand.count.should==13
card_selected=subject.play(2) # card #2 in his/her hand
subject.hand.count.should=12
end
end
はまた、実装では、我々は、私はそれを扱うことができるか、手のクラスに依存していますか?
おそらくあなたは自分より先に進んでいます。まだ存在していないため、Handを模倣する必要はありません。これで、Handクラスを作成した後にテストを書き直すようになります。テストを変更する必要はありません。あなたがそれをテストするための基本的なHandクラスを持つまで、playメソッドをテストしないでください。 –
私は同意しません。サポートするクラスを取得する前にテストを書くことは、基本的にあなたが望むAPIのテストを書いているので、はるかに意味のあるAPIを書くのに役立ちます。次に、そのAPIを実装して、テストをパスします。 –
私はMarc Talbotが正しいと思っています。Mocksの使い方の1つは、依存関係の知識がない状態でテストすることです。 –