2016-03-29 13 views
0

私はTic Tac Toeに取り組んでおり、#negamaxメソッドはコンピュータへの移動に最適な位置を返し、1(コンピュータ勝ち)または-1(ユーザ勝ち)を返すメソッドを持っています。 #negamaxをテストして、その実装が正しいことを保証し、そのユーザーは決してが勝つのですか?RSpecを使ってnegamaxをテストするには?

私は場所にいくつかのテストケースを持ち、最良のポジションを返すかどうかをテストしますが、すべてのケースをカバーしているわけではありません。

it 'never allows user to win' do 
    until game_over? 
    unless is_ai? 
     pos = empty_positions.sample 
     move(pos, user) 
    else 
     pos = negamax(0, 1, -100, 100) 
     move(pos, computer) 
    end 
    end 
    if game.won? 
    expect(winner).to eq(1) 
    else 
    expect(winner).to be_nil 
    end 
end 

それはテストが失敗しないことを単に「希望」と非常に効果的なようではありません。今のところ、これは私が持っているもの(最良の選択のためのテストケース以外)です。それを達成するためのよりよい方法は何でしょうか?

答えて

0

ただし、すべての可能な場合を網羅していません。

これは正常なことですが、アプリケーションを使用するすべての方法をシミュレートするのはほとんど不可能です。いくつかのことをテストすると、結果が大幅に増加する可能性があります。 「すべて」のテストは時間の無駄です。 「すべて」は問題ではないからです。特定のものだけが重要です。正しいことが重要です。

+0

こんにちは!答える時間をとってくれてありがとう。だから私は、メソッドをテストして、決して値を返さないことを確認する方法はないと思う。 – user3097405

+0

さて、入力範囲に対して値が返されないことを確認できますが、すべての入力を確認することはできません。それにもかかわらず、極端な場合やエッジの場合をテストすることによって、いつでもポイントチェックを行うことができます。 – dvxam

+0

意味があります。私は、 'negamax'メソッドをテストするエッジケースをカバーしていると思います。だから、それはOKであるはずです。あなたの助けをありがとう@dvxam。 – user3097405

関連する問題