【发布时间】:2011-06-22 01:30:03
【问题描述】:
我会用 PhpUnit 创建一些测试。但是我想测试的 php 文件使用 mt_rand() 函数。那么如何创建一个知道 mt_rand() 上次返回值的测试呢? 谢谢你回答我的问题,对不起我的英语不好,我来自德国;)
【问题讨论】:
-
请提供代码sn-p给我们看
我会用 PhpUnit 创建一些测试。但是我想测试的 php 文件使用 mt_rand() 函数。那么如何创建一个知道 mt_rand() 上次返回值的测试呢? 谢谢你回答我的问题,对不起我的英语不好,我来自德国;)
【问题讨论】:
Mersenne Twister 算法是一种确定性算法。它从一个种子开始,然后根据它生成随机数。因此,如果种子相同,它会生成相同的随机数。
通常 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 />';
}
【讨论】: