C# Nunit单元测试随机数
我希望对一个返回随机浮点作为ID的方法进行单元测试。我试图使用红-绿重构,但代码的随机性让我感到困惑。下面是我尝试测试的方法。我知道技术上我应该先写测试,但我不知道如何测试随机性C# Nunit单元测试随机数,c#,unit-testing,random,nunit,C#,Unit Testing,Random,Nunit,我希望对一个返回随机浮点作为ID的方法进行单元测试。我试图使用红-绿重构,但代码的随机性让我感到困惑。下面是我尝试测试的方法。我知道技术上我应该先写测试,但我不知道如何测试随机性 public Random ReturnDevID() { var rnd = new Random(); rnd.NextDouble(); return rnd;
public Random ReturnDevID()
{
var rnd = new Random();
rnd.NextDouble();
return rnd;
}
写这篇文章有点奇怪。我个人认为您不需要它,但如果您愿意,您可以尝试类似的方法(我还更改了您的实现,因为它返回的是Random的实例,而不是Random float):
您可能也希望检查链接的重复项-随机项不仅仅是不同的-即“除了测试函数返回所需范围内的日期外,您还希望确保结果分布均匀。”即,您建议的测试愉快地接受
public double ReturnDevID=>lastValue++代码>为“随机”。旁注:代码示例显示了random
..@AlexeiLevenkov的错误用法是的,您是对的,示例显示了random的错误用法,我在回答中指出了这一点。另一方面,问题不是“我的随机实现正确吗?”,而是“如何测试它?”。我不同意那种认为它是复制品的说法。链接的帖子只是展示了random的正确用法,而不是如何测试它。关于如何测试它,这是一个近似值。我个人不认为测试它有什么价值,但你介意详细说明一种测试它的正确方法吗?请注意,文章中的代码是使用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());
}