【发布时间】:2019-04-26 06:15:29
【问题描述】:
我有一些代码可以根据加权随机提供内容。更重的东西更有可能被随机选择。现在作为一名优秀的 rubyist,我当然想用测试来覆盖所有这些代码。而且我想测试是否根据正确的概率获取东西。
那么我该如何测试呢?为应该是随机的东西创建测试使得比较实际与预期变得非常困难。我有一些想法,以及为什么它们不能很好地工作:
Stub Kernel.rand 在我的测试中返回固定值。这很酷,但是 rand() 被多次调用,我不确定我是否可以通过足够的控制来测试我需要的东西。
大量获取随机项目并将实际比率与预期比率进行比较。但除非我可以无限次运行它,否则它永远不会完美,如果我在 RNG 中运气不好,可能会间歇性地失败。
使用一致的随机种子。这使得 RNG 可重复,但它仍然没有给我任何验证,即项目 A 将在 80% 的时间发生(例如)。
那么我可以使用什么样的方法来编写随机概率的测试覆盖率?
【问题讨论】:
-
您能否详细说明最后的反对意见?为什么你不能用种子 PRNG 测试你的分布曲线?
-
@DigitalRoss 因为它仍然是随机的。因此,如果我得到我想要的东西,10 次中有 3 次实际上并不能说明我是否满足 25% 的概率。提前知道随机值并没有真正的帮助。
标签: ruby unit-testing random statistics probability