Ruby 如何使用RSpec测试negamax?

Ruby 如何使用RSpec测试negamax?,ruby,rspec,minimax,Ruby,Rspec,Minimax,我正在做一个Tic-Tac-Toe,我有一个#negamax方法返回计算机移动的最佳位置,还有一个#winner方法返回1(计算机赢)或-1(用户赢)。我如何测试#negamax,以保证它的实现是正确的,并且用户永远不会赢 我有几个测试用例,测试它是否返回最佳位置,它确实返回了,但它并没有覆盖所有可能的情况。现在,这就是我所拥有的(除了最佳选择的测试用例): 仅仅“希望”测试永远不会失败似乎不是很有效。有什么更好的方法来实现它 但它并没有涵盖所有可能的情况 别担心,这很正常,几乎不可能模拟应用程

我正在做一个Tic-Tac-Toe,我有一个
#negamax
方法返回计算机移动的最佳位置,还有一个
#winner
方法返回
1
(计算机赢)或
-1
(用户赢)。我如何测试
#negamax
,以保证它的实现是正确的,并且用户永远不会赢

我有几个测试用例,测试它是否返回最佳位置,它确实返回了,但它并没有覆盖所有可能的情况。现在,这就是我所拥有的(除了最佳选择的测试用例):

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

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


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

嗨!感谢您抽出时间回答。所以我想没有办法测试一个方法来确保它永远不会返回一个值,尽管它可以?好吧,你可以确保它不会为一系列输入返回一个值,但是你永远无法检查所有的输入。尽管如此,您仍然可以通过测试一些极值/边缘情况来进行点检查。这很有意义。我想我已经介绍了测试
negamax
方法的边缘案例,所以,我想应该没问题:)谢谢你的帮助,@dvxam。
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