-2

我创建了一个生成随机数的函数。我计划使用这些随机数作为我的程序的输入,以测试不同的输入。

我怎样才能做到这一点?

这是我想测试的程序。

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();
        }
    }
}

此函数生成的数字必须用作两个变量(金额和余额)的测试输入。

4

3 回答 3

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);
}
于 2012-12-04T19:54:09.673 回答
0

问题是您RandomGenerateRandomNumber. Random根据系统时间播种,并且它使用的值仅每几毫秒更新一次。您每隔几毫秒就要求一个以上的值。

您应该创建一个实例,Random然后Next重复调用该实例。在你的情况下,你可以private static Random randomNumber = new Random()在方法之前做一个,它会解决这个问题。

于 2012-12-04T19:54:16.467 回答
0

为测试创建随机输入并不是增加代码覆盖率的好方法。事实上,在任何单元测试中使用随机值都不是一个好习惯,但可能有些与线程有关。

在您的情况下,只需几个简单的测试即可轻松实现 100% 的代码覆盖率。

  1. 账户被冻结(余额和金额无关紧要)
  2. 金额 > 余额
  3. 金额 = 余额(极端情况)
  4. 金额<余额
  5. 金额 = 0(极端情况)
  6. 金额 < 0

如果您使用随机输入,则永远无法保证您测试了所有路径。

于 2012-12-04T20:31:33.943 回答