我有一些代码,根据加权随机分配物品。权重更高的物品更有可能被随机选择。作为一名优秀的ruby程序员,我当然希望用测试覆盖所有这些代码。我想测试是否按照正确的概率获取物品。
那么我该如何进行测试呢?对于应该是随机的东西创建测试,很难比较实际结果和预期结果。以下是我提出的一些想法以及它们不太可行的原因:
1. 在我的测试中打桩 Kernel.rand,返回固定值。这很酷,但 rand() 会被调用多次,我不确定我能够通过足够的控制来测试我需要的内容。
2. 获取一个随机项大量次数,并比较实际比例和预期比例。但除非我可以无限次运行,否则这永远不会完美,并且如果 RNG 运气不好,可能会间歇性失败。
3. 使用一致的随机种子。这使 RNG 可重复,但仍然不能为我提供任何验证,例如 A 物品将发生80% 的时间。
那么什么样的方法可以用来编写测试覆盖随机概率呢?
那么我该如何进行测试呢?对于应该是随机的东西创建测试,很难比较实际结果和预期结果。以下是我提出的一些想法以及它们不太可行的原因:
1. 在我的测试中打桩 Kernel.rand,返回固定值。这很酷,但 rand() 会被调用多次,我不确定我能够通过足够的控制来测试我需要的内容。
2. 获取一个随机项大量次数,并比较实际比例和预期比例。但除非我可以无限次运行,否则这永远不会完美,并且如果 RNG 运气不好,可能会间歇性失败。
3. 使用一致的随机种子。这使 RNG 可重复,但仍然不能为我提供任何验证,例如 A 物品将发生80% 的时间。
那么什么样的方法可以用来编写测试覆盖随机概率呢?