说,我有以下测试:
[Test]
public void MyTest( [RandomNumbers( Count=100, Minimum=0, Maximum=1000 )] int number )
{
...
}
在某些时候,在我的常规构建过程中,它失败了。我收到一封电子邮件通知并开始调查。
现在,当我在 Visual Studio 中打开测试并单击“运行测试”时,它通过了。我再做一次,它又过去了。然后再次。然后再次。显然,失败与特定的随机数序列有关。
所以问题是:我如何以那个确切的顺序重新运行这个测试?
(如果我有完整的 Gallio 报告)
更新:(
在评论说这是一个坏主意之后)
首先,我实际上并不是在问这是否是个好主意。问题是不同的。
其次,当被测试的系统足够复杂,并且输入数据空间是多个独立维度时,将空间正确地分解为等价区域在脑力和时间上都存在重大挑战,如果组件更小,这是不值得的的系统已经过自己的测试。同时,如果我可以到处戳系统,为什么不这样做呢?
第三,我其实不是这个领域的新手。我总是将此技术与其他测试框架(例如 csUnit 和 NUnit)一起使用,并且证明它在捕获细微错误方面非常成功。当时还没有生成数据这样的概念,所以我们使用了自己定制的拐杖,形式是System.Random
带有预定种子的。该种子是作为夹具初始化的一部分生成的(通常基于当前时间)并仔细写入日志。这样,当测试失败时,我可以从日志中获取种子,将其插入测试夹具中,并获得完全相同的测试数据集,从而调试完全相同的失败。
第四,如果这是一个坏主意,为什么RandomNumbers
工厂首先存在?