Функция "тест" Рэнд т с PHPUnit

Я бы создал некоторые тесты с PhpUnit. Но файл php, который я хотел бы протестировать, использует функцию mt_rand (). Итак, как я могу создать тест, который знает значение mt_rand () возвращает в последний раз? Спасибо за ответ на мой вопрос и извините за мой плохой английский, я из Германии ;)

2 ответов


на Мерсенн Твистер алгоритм является детерминированным алгоритмом. Она начинается с семян, а затем генерирует случайные числа. Таким образом, учитывая, что семя одно и то же, оно будет генерировать одни и те же случайные числа.

обычно PHP семена mt_rand С microtime на основе данных, но вы можете вручную заполнить его с помощью mt_srand.

mt_srand(0);
var_dump(mt_rand());
mt_srand(0);
var_dump(mt_rand());

обратите внимание, что оба вызова функций дадут вам один и тот же номер 963932192.

так что все вы в основном нужно сделать, это посеять его вручную, и вы сможете предсказать все числа, которые он генерирует.


Если вы каждый раз засеваете mt_rand одним и тем же значением, вы всегда получите один и тот же ряд значений, возвращаемых mt_rand().

например:

mt_srand(123456);

for ($i = 0; $i < 10; $i++) {
    echo mt_rand(),'<br />';
}