随机测试用例生成中的最基本任务是生成一个某特定值域内的随机数字(整数或浮点数)。这通常通过 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 为基数的索引化集合。
文章来源于领测软件测试网 https://www.ltesting.net/