1

私はRubyを学んでいて、問題に遭遇しました。私は言語を学ぶために戦艦のゲームを構築しています。

ゲームは 2 つの入力ストリームと 2 つの出力ストリームをコンストラクターに取ります (2 つのクライアントが同じ端末から、両方のネットワーク接続から、またはそれぞれから 1 つから) 再生できるようにします)

これはゲーム自体には問題なく機能しますが、私はテスト駆動開発の方法で作業することも練習しています。これにより問題が発生しました-テスト(rspec)のために、入出力用にIOオブジェクトをモックします

@outputIO = mock("io")
@inputIO = mock("io")

これはほとんどの作業でうまく機能しますが、特定のセクションでは選択コマンドを使用する必要があるため、両方のプレイヤーが同時に情報を入力できます。

result = select([@p1_input,@p2_input], nil, nil)
for r in result[0]
  if r == @p1_input || r == @p2_input
    input = r
  end
end

@p1_input と @p2_input はコンストラクタで設定します。rspec テストを実行すると、次のようになります。

TypeError: can't convert RSpec::Mocks::Mock into IO

これが正しく機能するように IO をモックするにはどうすればよいですか? モックする代わりに、IO の新しいインスタンスを作成し、gets メソッドをオーバーライドする必要がありますか? それで十分でしょうか?

前もって感謝します。

4

1 に答える 1