Ich arbeite an einem Tic Tac Toe und ich habe eine #negamax
Methode, die die beste Position an den Computer zurückgibt, um zu verschieben, und eine #winner
Methode, die 1
(Computer gewinnt) oder -1
(Benutzer gewinnt) zurückgibt. Wie kann ich #negamax
testen, damit ich garantiere, dass seine Implementierung richtig ist und dieser Benutzer nie gewinnt?Wie RSpec verwenden, um Negamax zu testen?
Ich habe ein paar Testfälle an Orten, um zu testen, dass es die beste Position zurückgibt, und es tut, aber es deckt nicht alle möglichen Fälle ab. Gerade jetzt, das ist, was ich habe (außer die Testfälle für die beste Wahl):
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
Es ist nicht sehr effektiv scheint nur ‚Hoffnung‘, dass der Test wird nie versagen. Was wäre ein besserer Weg, dies zu erreichen?
Hallo! Danke, dass du dir die Zeit genommen hast zu antworten. Also ich denke, dass es keine Möglichkeit gibt, eine Methode zu testen, um sicherzustellen, dass sie nie einen Wert zurückgibt, obwohl es könnte? – user3097405
Nun, Sie können sicherstellen, dass es keinen Wert für eine Reihe von Eingaben zurückgibt, aber Sie werden nie ALLE Eingaben überprüfen können. Trotzdem können Sie immer einige Punkte überprüfen, indem Sie einige Extremfälle testen. – dvxam
Es macht Sinn. Ich denke, ich habe die Randfälle behandelt, in denen die 'Negamax'-Methode getestet wurde, also denke ich, dass es OK sein sollte. Danke für deine Hilfe, @dvxam. – user3097405