【问题标题】:Test mt_rand function with PHPUnit用 PHPUnit 测试 mt_rand 函数
【发布时间】:2011-06-22 01:30:03
【问题描述】:

我会用 PhpUnit 创建一些测试。但是我想测试的 php 文件使用 mt_rand() 函数。那么如何创建一个知道 mt_rand() 上次返回值的测试呢? 谢谢你回答我的问题,对不起我的英语不好,我来自德国;)

【问题讨论】:

  • 请提供代码sn-p给我们看

标签: php phpunit


【解决方案1】:

Mersenne Twister 算法是一种确定性算法。它从一个种子开始,然后根据它生成随机数。因此,如果种子相同,它会生成相同的随机数。

通常 PHP 为mt_rand 播种一些基于microtime 的数据,但您可以使用mt_srand 手动播种。

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

请注意,两个函数调用都会为您提供相同的号码963932192。

因此,您基本上需要做的就是手动播种,然后您就可以预测它生成的所有数字。

【讨论】:

  • 非常感谢,这正是我一直在寻找的答案!
  • @Paloran:如果这就是您要寻找的答案,请单击答案左侧的绿色勾号;)
  • 谢谢,这是我在这里问的第一个问题。
  • 请注意,此答案不再有效。在 PHP 5.2.1 中,Mersenne Twister 算法实现已更改,具有相同种子的序列不再产生相同的数字。我现在的建议是将 mt_rand 调用移动到一个单独的类/方法中,并使用 php 单元模拟类模拟返回值
【解决方案2】:

如果您每次都使用相同的种子值播种 mt_rand,您将始终获得 mt_rand() 返回的相同系列值。

例如:

mt_srand(123456);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2013-12-05
    • 2016-06-12
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多