2011-02-05 47 views
5

Tôi sẽ tạo một số thử nghiệm với PhpUnit. Nhưng tệp php mà tôi muốn thử nghiệm sử dụng hàm mt_rand(). Vì vậy, làm thế nào tôi có thể tạo ra một thử nghiệm mà biết giá trị của mt_rand() trả về thời gian qua? Cảm ơn bạn đã trả lời câu hỏi của tôi và xin lỗi vì tiếng Anh xấu của tôi, tôi đến từ Đức;)Kiểm tra chức năng mt_rand với PHPUnit

+0

vui lòng cung cấp một đoạn mã cho chúng ta thấy – Gordon

Trả lời

12

Thuật toán Mersenne Twister là một thuật toán xác định. Nó bắt đầu với một hạt giống và sau đó tạo ra các số ngẫu nhiên dựa trên nó. Do đó, với hạt giống giống nhau, nó sẽ tạo ra cùng một số ngẫu nhiên.

Hạt thường PHP mt_rand với một số dữ liệu dựa trên microtime, nhưng bạn có thể gieo hạt theo cách thủ công bằng cách sử dụng mt_srand.

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

Lưu ý rằng cả hai cuộc gọi chức năng sẽ cung cấp cho bạn cùng một số 963932192.

Vì vậy, tất cả các bạn về cơ bản phải làm, là hạt giống nó bằng tay và bạn sẽ có thể dự đoán tất cả các con số nó tạo ra.

+0

Cảm ơn bạn rất nhiều, đó là chính xác câu trả lời tôi đã tìm kiếm! – Ragadabing

+0

@Paloran: Nếu đó là câu trả lời bạn đang tìm kiếm, hãy nhấp vào dấu kiểm màu xanh ở bên trái câu trả lời;) – NikiC

+0

Cảm ơn, đó là câu hỏi đầu tiên của tôi mà tôi đã hỏi ở đây. – Ragadabing

0

Nếu bạn gieo hạt giống mt_rand với giá trị giống nhau mỗi lần, bạn sẽ luôn nhận được cùng một chuỗi giá trị được trả về bởi mt_rand().

ví dụ:

mt_srand(123456); 

for ($i = 0; $i < 10; $i++) { 
    echo mt_rand(),'<br />'; 
} 
Các vấn đề liên quan