gpt4 book ai didi

c# - 使用伪随机数生成器 (PRNG) 测试多个输入

转载 作者:行者123 更新时间:2023-11-30 15:16:55 24 4
gpt4 key购买 nike

问题背景

我已经有了针对给定问题的 O(nlog(n)) 解决方案,我将其用作检查器来测试新的更快的解决方案 (O(n))。这两种方法具有相同的签名:它们接收一个数组作为参数并返回一个 long 值。因此,我使用常规 PRNG 生成多个数组输入并运行 N 实验来检查这两个解决方案。我总是在开始时使用相同的 Seed 值从 PRNG 获得相同的数字流。

我在一个测试方法中实现了所有这一切(据我所知)超出了它被认为是单元测试的范围。事实上,我在Beautiful Code一书中看到了类似的实现,但我没有找到关于下面问题的一些解释。我越接近this question .

问题

我应该为每个失败的实验创建一个单元测试吗?我应该设置其他自动执行的操作吗?遇到这种情况怎么办?

我的代码说明

代码实际上非常简单,因为解决问题的方法与问题的目的无关。无论如何,主要部分包含在 while 循环中,基本上生成输入数组、调用慢速解决方案、调用快速解决方案并检查两个结果是否相等。

        public static int MySeed = 1000000007;
public static Random random;

[TestMethod()]
public void TestSeveralInputSizes()
{
random = new Random(MySeed);
int numberOfExperiments = (int)1e4;
int maxArraySize = (int)1e2;
while (numberOfExperiments-- > 0)
{
var array = GenerateRandomArray(random.Next(maxArraySize));
long expectedAnswer = SlowSolution(array);//O(nlog(n))
long myAnswer = FastSolution(array);//O(n)
Assert.AreEqual(expectedAnswer, myAnswer);
}
}

public long[] GenerateRandomArray(int maxArraySize)
{
//code to generate the array
}

最佳答案

听起来您提供的代码执行的测试类型与单元测试不同。它是 FastSolution 的验收测试,用于发现潜在的失败测试用例。您使用的方法看起来非常合理。

然后可以使用此验收测试中检测到的故障来创建位于代码其他位置的单个单元测试用例。在失败状态下编写这些测试用例将是处理错误修复的良好起点。修复后,每个单元测试用例将在未来的迭代中继续存在,并将很好地防范回归错误。

为不同的目的混合使用不同的测试类型是完全合理的。

关于c# - 使用伪随机数生成器 (PRNG) 测试多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48122813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com