私はブラックジャックゲームに取り組んでいます。私のゲームオブジェクトには、デッキが一定の浸透レベルに達した後にシャッフルされるデッキオブジェクトが含まれています。私のメソッドの多くは、このデッキオブジェクトに依存しています。セッターメソッドを介してデッキオブジェクトにアクセスできる理由はわかりません。ゲームクラスのメソッドはランダムなデッキの順序に依存しているため、テストに問題があります。
たとえば、deal_handメソッドがあります。
def deal_hand(player)
reset_deck if @deck.size < 2
player.hands.push(Hand.new(*@deck.pop(2)))
end
このような方法をどのようにテストする必要がありますか?@deckインスタンス変数で使用されるDeckオブジェクトを手動で作成できると思っていました。残念ながら、インスタンス変数を設定することはできません。また、テスト以外に「設定可能」である理由がないため、セッターを追加したくありません。テストファイルからクラスにモンキーパッチを適用し、セッターを追加する必要がありますか?
余談ですが、私は主にスクリプトを作成しますが、このプロジェクトが手に負えなくなった後、テストの作成を開始する必要があると判断しました。「パターンのテスト」のための標準的なリソースはありますか?
編集:
スタブ/モックをサポートするMiniTestを使用しています。私の知る限りでは、モックオブジェクトのメソッド呼び出しに期待される戻り値を設定することしかできません。モックデッキを作成した場合、実際のデッキオブジェクトも内部配列に依存します。デッキを呼び出すコードはいずれも、配列に直接アクセスしません。