如何使用RSpec来测试negamax?

How to use RSpec to test negamax?

我正在玩井字游戏,我有一个 #negamax 方法 returns 是计算机移动到的最佳位置,还有一个 #winner 方法 returns 1(计算机获胜)或 -1(用户获胜)。我如何测试 #negamax 以保证它的实现是正确的并且用户 never 获胜?

我在一些地方有一些测试用例,以测试它 returns 最好的位置,确实如此,但它没有涵盖所有可能的情况。现在,这就是我所拥有的(除了最佳选择的测试用例):

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

只是'hope'测试永远不会失败似乎不是很有效。什么是更好的方法来完成它?

but it does not cover all possible cases.

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