2016-03-29 17 views
0

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?

Antwort

0

aber es deckt nicht alle möglichen Fälle ab.

Keine Sorge, das ist normal, es ist fast unmöglich, alle Möglichkeiten zu simulieren, mit denen eine Anwendung verwendet wird. Das Testen einiger Dinge kann zu enormen Ergebnissteigerungen führen. "Alles" zu testen ist Zeitverschwendung. Denn "alles" spielt keine Rolle. Nur bestimmte Dinge sind wichtig. Die richtigen Dinge sind wichtig.

+0

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

+0

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

+0

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