【问题标题】:Nunit unit testing random number [duplicate]Nunit单元测试随机数[重复]
【发布时间】:2019-11-20 18:03:55
【问题描述】:

我希望对返回随机浮点数作为 ID 的方法进行单元测试。我正在尝试使用 Red Green Refactor,但被代码的随机性难住了。下面找到我要测试的方法。我知道我在技术上应该先编写测试,但我不知道如何测试随机。

public Random ReturnDevID()
                {
                    var rnd = new Random();
                    rnd.NextDouble();
                    return rnd;
                }

【问题讨论】:

标签: c# unit-testing random nunit


【解决方案1】:

写起来有点奇怪。我个人认为你不需要它,但如果你愿意,你可以尝试这样的事情(我也改变了你的实现,因为它返回一个 Random 实例,而不是一个随机浮点数):

public double ReturnDevID()
{
     var rnd = new Random();
     return rnd.NextDouble();
}

public void TestRandom()
{
     // Call the method 100 times and save the result in a list
     var randoms = Enumerable.Range(0, 100)
                             .Select(i => ReturnDevID())
                             .ToList();

      // Make sure you have no duplicates
      Assert.AreEqual(randoms.Count, randoms.Distinct().Count());
}

【讨论】:

  • 您可能也想检查链接的重复项 - 随机不仅仅是不同的 - 即“除了测试函数返回所需范围内的日期之外,您还想确保结果是好的 -分散式。” IE。您建议的测试很乐意接受 public double ReturnDevID => lastValue ++; 作为“随机”。
  • 旁注:代码示例显示Random的错误用法...
  • @AlexeiLevenkov 是的,你是对的,样本显示了 Random 的错误用法,我在答案中指出了这一点。另一方面,问题不是“我的随机实现是否正确?”,而是“我如何测试它?”。我不同意它是重复的评估。链接的帖子只显示了随机的正确用法,而不是如何测试它
  • 关于如何测试它,这是一个近似值。我个人看不出测试它的价值,但您介意详细说明测试它的正确方法吗?
猜你喜欢
  • 2014-02-08
  • 1970-01-01
  • 2019-11-09
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多