如何使用RSpec测试negamax?

时间:2016-03-29 03:20:52

标签: ruby rspec minimax

我正在开发一个Tic Tac Toe,我有一个#negamax方法可以返回计算机移动到的最佳位置,还有#winner方法返回1(计算机)获胜)或-1(用户获胜)。如何测试#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

仅仅“希望”测试永远不会失败似乎没有效果。什么是更好的方法来实现它?

1 个答案:

答案 0 :(得分:0)

  

但它并未涵盖所有可能的情况。

不用担心,这是正常的,几乎不可能模拟应用程序的所有使用方式。测试一些东西会导致结果大幅增加。测试“一切”是浪费时间。那是因为“一切”并不重要。只有某些事情很重要。正确的事情很重要。