Python 编写随机函数的测试

Python 编写随机函数的测试,python,unit-testing,testing,random,Python,Unit Testing,Testing,Random,我正在编写一个用于实验进化算法的软件包,不用说,它包含了很多随机方法。现在,我想为这个包编写一些(doc)测试,这样我就可以验证一切是否正常,但我遇到的情况是,“大多数时候”测试都应该是真的。我觉得我可能是走错了路,但我还是想听听你对此的一些想法 例如,我的博士论文中有这样的内容: >>> a = Genome() >>> b = Genome() >>> a.mutate() >>> a != b True # Well,

我正在编写一个用于实验进化算法的软件包,不用说,它包含了很多随机方法。现在,我想为这个包编写一些(doc)测试,这样我就可以验证一切是否正常,但我遇到的情况是,“大多数时候”测试都应该是真的。我觉得我可能是走错了路,但我还是想听听你对此的一些想法

例如,我的博士论文中有这样的内容:

>>> a = Genome()
>>> b = Genome()
>>> a.mutate()
>>> a != b
True # Well, most of the time.
实现这样的测试意味着当一切正常时,测试有时会失败


在进行测试之前,我阅读了修复RNG种子的建议,但是在编写测试之前,我必须确保一切正常,因为测试应该包括预期的结果。

您可以使其失败的概率可以忽略不计,例如

a = Genome()
genomes = []
for i in range(100):
    b = Genome()
    b.mutate()
    genomes.append(b)
assert any(a != b for b in genomes)
如果您最初的测试大部分时间都成功了,那么这个测试在所有实际应用中都会成功

该测试还可以对允许匹配的基因组数量施加合理限制


可以说,测试结果不如原来的好。也许在这里使用doctests是错误的方法,您应该编写单独的单元测试。

您可以使它失败的概率可以忽略不计,例如

a = Genome()
genomes = []
for i in range(100):
    b = Genome()
    b.mutate()
    genomes.append(b)
assert any(a != b for b in genomes)
如果您最初的测试大部分时间都成功了,那么这个测试在所有实际应用中都会成功

该测试还可以对允许匹配的基因组数量施加合理限制


可以说,测试结果不如原来的好。也许在这里使用doctests是错误的方法,您应该编写单独的单元测试。

您知道大多数时候
想要什么吗?如果它至少是1%,那么你可以在你的单元中生成100个答案,并确保与你想要的答案相差不超过1或2个。@Zenon但从统计上看,它有时会超过最小百分比,因此可能仍然无法通过测试。你应该确定你对随机函数的测试,如果其中一个测试失败,以合理的阈值再次运行测试。大多数时候,您是否知道自己想要什么?如果它至少是1%,那么你可以在你的单元中生成100个答案,并确保与你想要的答案相差不超过1或2个。@Zenon但从统计上看,它有时会超过最小百分比,因此可能仍然无法通过测试。你应该确定你对随机函数的测试,如果其中一个测试失败,以合理的阈值再次运行测试。因此,它可能(尽管不太可能)因为没有好的理由而失败这一事实是可以原谅的?@Noio:这是一个实际问题,而不是一个理论问题。如果你最初的测试失败了,比如说10次 % 在这些案例中,10^100个案例中有一个会失败。在实践中,这是永远不会发生的。因此,它有可能(尽管不太可能)因为没有好的理由而失败这一事实是可以原谅的?@Noio:这是一个实际问题,而不是一个理论问题。如果你最初的测试失败了,比如说10次 % 在这些案例中,10^100个案例中有一个会失败。实际上,这从来都不是。