我创建了一个生成随机数的函数。我计划使用这些随机数作为我的程序的输入,以测试不同的输入。
我该如何做到这一点?
这是我想测试的程序。
public void Debit(double amount)
{
if (m_frozen)
{
throw new Exception("Account frozen");
}
if (amount > m_balance)
{
throw new ArgumentOutOfRangeException("amount");
}
if (amount < 0)
{
throw new ArgumentOutOfRangeException("amount");
}
m_balance += amount;
}
这是生成随机数的函数:
using System;
namespace Csharp.RandomExample
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i <= 100; i++)
{
Console.WriteLine(GenerateRandomNumber());
}
Console.ReadLine();
}
static int GenerateRandomNumber()
{
Random randomNumber = new Random();
return randomNumber.Next();
}
}
}
此函数生成的数字必须用作两个变量(金额和余额)的测试输入。
答案 0 :(得分:1)
如果我理解正确你只需要将GenerateRandomNumber()方法的返回值传递给你的Debit()方法
for (int i = 0; i <= 100; i++)
{
Debit((double)GenerateRandomNumber());
}
刚刚注意到原始帖子的编辑。在您的代码中不清楚m_amount和m_balance的设置,但您可以使用GenerateRandomNumber()方法的结果来设置它们。
for (int i = 0; i <= 100; i++)
{
int testNumber = GenerateRandomNumber();
m_Amount = m_Balance = testNumber;
Debit(doubleValueYouWantToTest);
}
答案 1 :(得分:0)
问题是您正在Random
内创建新的GenerateRandomNumber
实例。 Random
基于系统时间播种,其使用的值仅每隔几毫秒更新一次。你每隔几毫秒就要求一个以上的值。
您应该创建Random
的单个实例,然后重复调用该{1}}。在你的情况下,你可以在方法之前制作一个Next
,它将解决这个问题。
答案 2 :(得分:0)
为测试创建随机输入并不是增加代码覆盖率的好方法。事实上,在任何单元测试中使用随机值都不是好习惯,但也许有些与线程有关。
在您的情况下,只需很少的简单测试即可获得100%的代码覆盖率。
如果你使用随机输入,你永远不能保证你测试了所有路径。