【发布时间】:2011-03-05 08:31:15
【问题描述】:
具体来说,我有一个方法从列表中挑选 n 个项目,其中 a% 满足一个条件,b% 满足第二个条件,依此类推。一个简化的示例是选择 5 个项目,其中 50% 的给定属性值为“true”,50% 的值为“false”; 50% 的时间该方法将返回 2 true/3 false,而另外 50% 的时间返回 3 true/2 false。
从统计上讲,这意味着超过 100 次运行,我应该得到大约 250 真/250 假,但由于随机性,240/260 是完全可能的。
对此进行单元测试的最佳方法是什么?我假设即使在技术上 300/200 是可能的,但如果发生这种情况,它可能应该无法通过测试。对于这种情况,是否存在普遍接受的容忍度,如果有,您如何确定是什么?
编辑:在我正在处理的代码中,我没有使用伪随机数生成器的奢侈,或者强制它随着时间的推移而平衡的机制,因为挑选出来的列表是在不同的机器上生成。我需要能够证明,随着时间的推移,符合每个标准的平均项目数将趋于所需的百分比。
【问题讨论】:
-
在示例中,您想要至少/正好 50% 还是大约 50%?更具体地说,这个测试的随机性是什么?
-
我怀疑您实际上并没有编写单元测试。如果您正在测试在不同机器上运行的服务器,那么您实际上是在进行系统测试。我只能告诉你:如果你对这些服务器上运行的类进行了单元测试,你就不再需要这么多(详细的)系统测试了。
-
不,关键是要确认算法确实选择了 2/3 50% 的时间,以及其他 50% 的 3/2(在这个简单的示例中),无论它在哪里使用。这不是一个系统会产生这个。在一台机器上运行 1000 次被认为是一个足够的测试,以证明如果它在全球 100 台机器上运行 10 次,它会得到适当的平均,因此我计划对它进行单元测试。
标签: unit-testing statistics probability