2016-03-29 4 views
0

Я работаю над Tic Tac Toe, и у меня есть метод #negamax, который возвращает наилучшее положение на компьютер для перемещения и метод #winner, который возвращает 1 (выигрывает компьютер) или -1 (пользователь выигрывает). Как я могу проверить #negamax, чтобы гарантировать, что его реализация правильная, и что пользователь никогда не выигрывает?Как использовать RSpec для тестирования негамакса?

У меня есть несколько тестовых примеров в местах, чтобы проверить, что он возвращает наилучшее положение, и это действительно так, но оно не распространяется на все возможные случаи. Прямо сейчас, это то, что у меня есть (кроме тестов для лучшего выбора):

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», поэтому, я думаю, это должно быть ОК :) Спасибо за вашу помощь, @dvxam. – user3097405

Смежные вопросы