有些应用程序域(例如GameDev)中有许多函数应该使用随机值来创建,以生成它们的输出。其中一个例子如下:
def generate_key(monster_key_drop_coef):
key_letters = string.ascii_uppercase
rand = random.random()
if monster_key_drop_coef < rand:
return None
button = {}
button["type"] = random.choice([1,2,3])
button["letter"] = random.choice(key_letters)
return button
此函数基于几个随机操作生成项目的放置。如果要自动验证此函数的正确性,则会出现问题。生成的值不是确定性的,编写回归测试似乎是不可能的。在
我的问题是:
我将重写函数以使用依赖注入(随机数生成器作为参数传递给函数)。然后,您可以传递一个随机数生成器的模拟,用不同的确定性“随机”输入测试函数。在
当然,您也可以测试不依赖于random调用结果的断言。例如:
我绝不会写一个有非确定性结果的unittest,即使是千分之一。我关心每一次测试失败,而随机结果会令人不安。最好封装随机性,这样函数就可以独立于随机数生成器进行测试。在
下面介绍一个有用的单元测试:
它验证函数签名,覆盖函数代码的所有行(概率很高),在99.999%的情况下通过。还验证了函数从1000中至少产生一个下降,有时不生成下降。 0.2是物品掉落的概率。在
相关问题 更多 >
编程相关推荐