编写随机函数的测试

时间:2012-04-05 14:32:37

标签: python unit-testing testing random

我正在编写一个用于试验进化算法的软件包,不用说,它包含了很多随机方法。现在,我想为这个包写一些(doc)测试,所以我可以验证一切正常,但我遇到的情况是测试应该在大多数情况下都是真的。感觉我可能接近这个错误的方式,但我仍然想听听你对此的一些看法。

例如,我的doctests中有类似的东西:

>>> a = Genome()
>>> b = Genome()
>>> a.mutate()
>>> a != b
True # Well, most of the time.

实现这样的测试意味着测试有时会在一切正常时失败。

我在做测试之前阅读了修复RNG种子的建议,但之后我必须确保一切都在之前我可以编写测试,因为测试应该包含预期的结果。

1 个答案:

答案 0 :(得分:1)

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

a = Genome()
genomes = []
for i in range(100):
    b = Genome()
    b.mutate()
    genomes.append(b)
assert any(a != b for b in genomes)

如果您的原始测试在大多数时间内成功完成,那么这个测试将始终用于所有实际目的。

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

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