我有一些基于加权随机递送事物的代码。更重的东西更可能随机选择。现在成为一名优秀的rubyist,我想用测试来涵盖所有这些代码。而且我想测试一下,根据正确的概率,事情正在被抓取。Ruby:在代码中使用rand()但编写测试来验证概率
那么我该如何测试呢?为应该是随机的东西创建测试使得很难比较实际与预期。我有几个想法,以及为什么他们不会很好地工作:
Stub Kernel.rand在我的测试中返回固定值。这很酷,但rand()被多次调用,我不确定我是否可以使用足够的控制来测试我需要的东西。
获取一个随机项大量的次数,并比较实际比率与预期比率。但除非我可以无限次地运行它,否则这将永远不会完美,如果我在RNG中运气不好,可能会间歇性地失败。
使用一致的随机种子。这使得RNG可重复使用,但它仍然无法证实项目A将在80%的时间内发生(例如)。
那么我可以用什么样的方法来编写随机概率的测试覆盖?
您可以扩展最终的异议吗?为什么不能用种子PRNG测试你的分布曲线? – DigitalRoss 2011-05-20 22:16:58
@DigitalRoss因为它仍然是随机的。所以如果我得到我想要的东西,10次中有3次实际上并没有告诉我是否满足25%的概率。提前知道随机值并没有什么帮助。 – 2011-05-20 22:54:28