用随机生成的测试输入进行测试

时间:2012-12-04 19:41:17

标签: c# testing

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

我该如何做到这一点?

这是我想测试的程序。

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

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

3 个答案:

答案 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%的代码覆盖率。

  1. 帐户冻结(余额和金额无关紧要)
  2. 金额&gt;平衡
  3. 金额=余额(边缘情况)
  4. 金额&lt;平衡
  5. 金额= 0(边缘情况)
  6. 金额&lt; 0
  7. 如果你使用随机输入,你永远不能保证你测试了所有路径。