2011-02-05 116 views
5

我會用PhpUnit創建一些測試。但我想測試的php文件使用mt_rand()函數。那麼如何創建一個知道mt_rand()返回上一次值的測試呢? 謝謝你回答我的問題,對不起我英語不好,我來自德國;)用PHPUnit測試mt_rand函數

+0

請提供代碼段來給我們看 – Gordon 2011-02-05 22:45:10

回答

12

Mersenne Twister算法是一種確定性算法。它從種子開始,然後根據它生成隨機數。因此,鑑於種子是相同的,它會產生相同的隨機數。

通常PHP種子mt_rand與一些基於microtime的數據,但您可以使用mt_srand手動將其種子。

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

注意,這兩個函數調用會給你相同數量963932192

所以,你基本上必須做的,是手動種子,你將能夠預測它產生的所有數字。

+0

非常感謝,這正是我一直在尋找的答案! – Ragadabing 2011-02-06 10:23:00

0

如果您每次都使用相同的種子值生成mt_rand,您將始終獲得由mt_rand()返回的相同系列值。

例如:

mt_srand(123456); 

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