gpt4 book ai didi

c# - 如何在 MbUnit 中使用相同的数据重新运行相同的测试

转载 作者:行者123 更新时间:2023-11-30 18:07:49 26 4
gpt4 key购买 nike

比如说,我有以下测试:

    [Test]
public void MyTest( [RandomNumbers( Count=100, Minimum=0, Maximum=1000 )] int number )
{
...
}

在我的常规构建过程中的某个时候,它失败了。我收到一封电子邮件通知并开始调查。

现在,当我在 Visual Studio 中打开测试并单击“运行测试”时,它通过了。我再做一次,它又通过了。然后再次。然后再次。显然,失败与特定的随机数序列有关。

所以问题是:我如何用那个确切的顺序重新运行这个测试?
(前提是我有完整的 Gallio 报告)



更新:
(在评论说这是一个坏主意之后)

首先,我实际上并不是在问这是否是个好主意。问题是不同的。

其次,当被测系统足够复杂且输入数据空间具有多个独立维度时,正确地将空间分解为等效区域在脑力和时间上都是一项重大挑战,这是不值得的,前提是系统的较小组件已经过自己的测试。同时,如果我可以随便戳一下系统,为什么不这样做呢?

第三,我其实不是这方面的新手。我总是将这种技术与其他测试框架(例如 csUnit 和 NUnit)一起使用,事实证明它在捕获细微错误方面非常成功。当时,还没有生成数据这样的概念,所以我们使用了我们自己的自定义拐杖,形式为 System.Random 并带有预定的种子。该种子是作为夹具初始化(通常基于当前时间)的一部分生成的,并仔细写入日志。这样,当测试失败时,我可以从日志中获取种子,将其插入测试夹具,并获得完全相同的测试数据集,因此,完全相同的调试失败。

第四,如果这是一个糟糕的主意,为什么 RandomNumbers 工厂首先存在?

最佳答案

Gallio/MbUnit目前没有内置方式再次生成相同的随机数序列。但我认为这可能是一个有用的功能,我确实打开了一个 issue对于那个请求。 准备好后我会更新主题答案。

我的建议如下:

  • 将内部随机生成器的实际种子显示为测试报告中的注释
  • Seed 属性公开给 [RandomNumbers][RandomStrings] 属性,以及流畅的数据生成器。<

因此,您可以通过为生成器提供相同的种子编号,轻松地重新生成完全相同的值序列。

更新:此功能现已在 Gallio v3.3.8 中可用及以后。


现在我们都同意 Péter 所说的。使用随机数作为单元测试的输入很少是个好主意。必然的结果是它有时很方便而且最合适。这正是我们决定在 MbUnit 中实现该功能的原因。恕我直言,可以很好地适应随机测试输入的常见场景是 stochastic analysis on hash code computations .

关于c# - 如何在 MbUnit 中使用相同的数据重新运行相同的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3739337/

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