隨機測試用例生成中的最基本任務是生成一個某特定值域內的隨機數字(整數或浮點數)。這通常通過 System.Random 類來實現。假定有以下代碼:
Random objRan = new Random(5);
int n = objRan.Next(7);
Console.WriteLine("[0,6] 值域中的隨機整數是 " + n);
n = objRan.Next(3, 13);
Console.WriteLine("[3,12] 值域中的隨機整數是 " + n);
以 Random 對象為例,傳入一個種子值(在本例中為 5)。該種子值用于為表現出真正隨機數字許多特性的某個數字序列設置起點。序列是確定的(這些數字是從輸入種子值或序列中前幾個數字時所用的數學公式而生成),因此由 System.Random 生成的數字從技術角度來講是偽隨機數字,但在非正式使用情況下或上下文明確時,通常將其稱為隨機數字(如此例所示)。我選擇的種子值具有任意性。如果我使用不接受種子值的重載 Random 構造函數,則將使用從系統時鐘派生的值。如果在隨后測試運行時,您需要重新創建隨機數字序列(通常情況是這樣),則應提供一個種子值。有關偽隨機數字生成器種子值的討論是一個重要且復雜的主題,抱歉的是,它不在本專欄的討論范圍內。
生成隨機整數的最簡單方法是調用 Random.Next 方法,傳入單個整數參數。返回值是偽隨機列表中的下一個整數,此值大于或等于 0 且絕對小于該參數。因此,以下調用將返回一個介于 0 和 9 之間(包括 0 和 9)而不是介于 0 和 10 之間(包括 0 和 10)的數字:
int n = objRan.Next(10);
Random.Next 方法的重載將接受兩個整數參數并返回一個大于或等于第一個參數且絕對小于第二個參數的整數。如果您要模擬的測試用例數據類似于滾動的普通六面骰子,要得到一個介于 1 和 6 之間(包括 1 和 6)的隨機數字,則調用可能如下所示:
int roll = objRan.Next(1, 7);
這很容易從某數組生成一個隨機選取項:
string[] items = new string[] { "alpha", "beta", "gamma", "delta" };
Console.WriteLine("{ 'alpha', 'beta', 'gamma', 'delta' } 的" +
"隨機成員是 " +
items[objRan.Next(items.Length)] );
如果數組大小為 N,則調用 objRan.Next(N) 所生成的返回值將是值域 [0, N-1] 內的一個整數(該值域完全對應于數組的索引值)。請注意,該方法也可用于 ArrayList 對象,而且事實上也可用于任何以 0 為基數的索引化集合。
文章來源于領測軟件測試網 http://www.kjueaiud.com/