我正在编写一个用于试验进化算法的软件包,不用说,它包含了很多随机方法。现在,我想为这个包写一些(doc)测试,所以我可以验证一切正常,但我遇到的情况是测试应该在大多数情况下都是真的。感觉我可能接近这个错误的方式,但我仍然想听听你对此的一些看法。
例如,我的doctests中有类似的东西:
>>> a = Genome()
>>> b = Genome()
>>> a.mutate()
>>> a != b
True # Well, most of the time.
实现这样的测试意味着测试有时会在一切正常时失败。
我在做测试之前阅读了修复RNG种子的建议,但之后我必须确保一切都在之前我可以编写测试,因为测试应该包含预期的结果。
答案 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是错误的方法,你应该编写单独的单元测试。