如何验证随机使用的函数的正确性?

Ali*_*nau 5 python testing random regression-testing

有一些应用程序域(例如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
Run Code Online (Sandbox Code Playgroud)

此函数基于多个随机操作生成项目的丢弃.如果要自动验证此功能的正确性,则会出现此问题.生成的值不是确定性的,并且回归测试的编写似乎是不可能的.

我的问题是:

  1. 这可以为这类函数编写有用的回归测试吗?
  2. 在这种情况下,是否有任何通用的方法来创建其他类型的测试?

Ali*_*nau 3

下面介绍了有用的单元测试之一:

def test_generate_key():
    button_list = []
    for _ in range(1, 1000):
        button_list.append(generate_key(0.2))

    is_all_none = True
    is_not_none = False
    for key in button_list:
        is_all_none &= (key is None)
        is_not_none |= (key is not None)

    assert is_all_none == False
    assert is_not_none == True
Run Code Online (Sandbox Code Playgroud)

它验证函数签名,覆盖函数代码的所有行(良好的概率),并且在 99.999% 的情况下会通过。还验证了该函数会从 1000 个中产生至少一个掉落,有时不会产生掉落。0.2 是物品掉落的概率。