私は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
それはテストが失敗しないことを単に「希望」と非常に効果的なようではありません。今のところ、これは私が持っているもの(最良の選択のためのテストケース以外)です。それを達成するためのよりよい方法は何でしょうか?
こんにちは!答える時間をとってくれてありがとう。だから私は、メソッドをテストして、決して値を返さないことを確認する方法はないと思う。 – user3097405
さて、入力範囲に対して値が返されないことを確認できますが、すべての入力を確認することはできません。それにもかかわらず、極端な場合やエッジの場合をテストすることによって、いつでもポイントチェックを行うことができます。 – dvxam
意味があります。私は、 'negamax'メソッドをテストするエッジケースをカバーしていると思います。だから、それはOKであるはずです。あなたの助けをありがとう@dvxam。 – user3097405