2011-02-05 13 views
5

Vorrei creare alcuni test con PhpUnit. Ma il file php che vorrei testare utilizza la funzione mt_rand(). Quindi, come posso creare un test che conosca il valore di mt_rand() restituisce l'ultima volta? Grazie per aver risposto alla mia domanda e mi dispiace per il mio pessimo inglese, vengo dalla Germania;)Test della funzione mt_rand con PHPUnit

+0

si prega di fornire un frammento di codice per noi vedere – Gordon

risposta

12

L'algoritmo Mersenne Twister è un algoritmo deterministico. Inizia con un seme e quindi genera numeri casuali basati su di esso. Quindi, dato che il seme è lo stesso, genererà gli stessi numeri casuali.

Di norma semi PHP mt_rand con alcuni dati basati su microtime, ma è possibile inizializzarlo manualmente utilizzando mt_srand.

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

Si noti che entrambe le chiamate di funzione vi darà lo stesso numero 963932192.

Quindi tutto quello che devi fare, è seminare manualmente e sarai in grado di prevedere tutti i numeri che genera.

+0

ringrazio molto, questo è esattamente la risposta che stavo cercando! – Ragadabing

+0

@Paloran: Se questa è la risposta che cercavi, fai clic sul segno di spunta verde a sinistra della risposta;) – NikiC

+0

Grazie, è stata la mia prima domanda che ho posto qui. – Ragadabing

0

Se si semina mt_rand con lo stesso valore di inizializzazione ogni volta, si otterrà sempre la stessa serie di valori restituiti da mt_rand().

ad esempio:

mt_srand(123456); 

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