Какой лучший способ проверить это? - PullRequest
15 голосов
/ 18 января 2010

Я прохожу через EdgeCase Ruby Koans. В about_dice_project.rb есть тест под названием «test_dice_values_should_change_between_rolls», который прост:

  def test_dice_values_should_change_between_rolls
    dice = DiceSet.new

    dice.roll(5)
    first_time = dice.values

    dice.roll(5)
    second_time = dice.values

    assert_not_equal first_time, second_time,
      "Two rolls should not be equal"
  end

За исключением этого комментария, который там появляется:

# THINK ABOUT IT:
#
# If the rolls are random, then it is possible (although not
# likely) that two consecutive rolls are equal.  What would be a
# better way to test this.

Что (очевидно) заставило меня задуматься: каков наилучший способ надежного тестирования чего-либо случайного подобного (конкретно и вообще)?

Ответы [ 13 ]

1 голос
/ 25 августа 2010

Мне кажется, это немного глупо. Вы должны проверять, что (случайный) генератор случайных чисел генерирует случайные числа? Это бесполезно и бессмысленно. Во всяком случае, вы можете проверить эти вызовы dice.roll на ваш PRNG.

0 голосов
/ 24 февраля 2012

я только что создал новый экземпляр

def test_dice_values_should_change_between_rolls
    dice1 = DiceSet.new
    dice2 = DiceSet.new

    dice1.roll(5)
    first_time = dice1.values.dup

    dice2.roll(5, first_time)
    second_time = dice2.values

assert_not_equal first_time, second_time,
   "Two rolls should not be equal"

  end
0 голосов
/ 29 июля 2011

Я решил это, просто создав новый набор значений для каждой кости каждый раз, когда вызывается метод roll:

def roll(n)     
    @numbers = []
    n.times do
      @numbers << rand(6)+1
    end
end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...