测试生成随机值的函数

时间:2014-05-12 05:31:41

标签: python python-unittest

我有这段代码可用于生成随机数量的值:

import random
def random_digit_number(num_of_digits, leading_zeroes=True):
    """
    Generate a random number with specified number of digits
    """
    if not leading_zeroes:
        return random.randint(10**(num_of_digits-1), 10**num_of_digits-1)
    else:
        return str("%0" + str(num_of_digits) + "d") % random.randint(0, 10**num_of_digits-1)

我应该为这个函数写一个unittest

我的问题是,如何测试此功能,因为它会生成随机值?如何覆盖所有边缘情况?我甚至在这里测试什么?

2 个答案:

答案 0 :(得分:2)

我至少可以看到四种测试方法,但可能还有更多。

  1. 测试是否为各种输入生成正确数量的值,包括对非常大量随机数的请求。
  2. 当请求的值数为负数时,测试它是否正常运行。
  3. 测试标志leading_zeroes是否实际按预期工作。
  4. 使用random.seed()使用固定值对随机数生成器进行种子设定,然后验证序列是否具有确定性并与预期序列匹配。请注意,这可能与实现有关,因此如果您的函数旨在在不同版本的Python上运行,则此测试可能无效。

答案 1 :(得分:2)

  1. 使用random
  2. 模拟此模块中的unittest.mock.patch
  3. 运行此功能"足够的时间"断言每个输出都在预期范围内
  4. https://docs.python.org/3/library/unittest.mock.html#unittest.mock.patch