2011-02-05 13 views
5

Utworzę testy z PhpUnit. Ale plik php, który chciałbym przetestować, wykorzystuje funkcję mt_rand(). Więc jak mogę utworzyć test, który zna wartość mt_rand() zwraca ostatni raz? Dziękuję za odpowiedź na moje pytanie i przepraszam za mój zły angielski, jestem z Niemiec;)Funkcja testowa mt_rand z PHPUnit

+0

proszę podać fragment kodu dla nas zobaczyć – Gordon

Odpowiedz

12

Algorytmem deterministycznym jest algorytm Mersenne Twister. Zaczyna się od nasienia, a następnie generuje na nim losowe liczby. Zatem, biorąc pod uwagę, że materiał siewny jest taki sam, wygeneruje on te same liczby losowe.

Zwykle nasiona PHP mt_rand z pewnymi danymi opartymi na microtime, ale można ręcznie zaszczepić je przy użyciu mt_srand.

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

Należy pamiętać, że oba wywołania funkcji dają ten sam numer 963932192.

Więc wszystko, co musisz zrobić, to przesiać ręcznie, a będziesz w stanie przewidzieć wszystkie generowane liczby.

+0

Dziękuję bardzo, to jest dokładnie to odpowiedź ja szukałem! – Ragadabing

+0

@Paloran: Jeśli jest to odpowiedź, której szukałeś, kliknij zielony znacznik po lewej stronie odpowiedzi;) – NikiC

+0

Dzięki, to było moje pierwsze pytanie, które tutaj zadałem. – Ragadabing

0

Jeśli za każdym razem będziesz wysyłać mt_rand z tą samą wartością początkową, zawsze otrzymasz tę samą serię wartości zwróconych przez mt_rand().

na przykład:

mt_srand(123456); 

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