nosetest具有随机元素的函数

时间:2015-07-21 07:10:56

标签: python testing

您好我是单元测试的新手,并且想知道我将如何测试其中包含随机组件的函数?

我有以下python代码:

class Questions(object):

def __init__(self):

    self.questions = {}

place_value = {
    0: "Thousands",
    1: "Hundreads",
    2: "Tens",
    3: "Units/ones",
}

def place_value(self, question, number):

    selection = randint(0, 3)

    number = ''.join(map(str, number))
    value = number[selection]

    question_text = question.format(value, number)

    li = generate_a_list(question_text)

    self.questions['question1'] = li

测试代码

def test_place_value():

    obj = math_q.Questions()
    obj.place_value("value of {0} in {1}", [1,2,3,4])

    assert_equal(obj.questions["question1"], ["value of {0} in 1234"])

问题是我不知道从值=数字[选择]'中选择了哪个值1-4。上面的代码。

可以做些什么呢? 感谢。

1 个答案:

答案 0 :(得分:0)

假设您的代码在path/my_file.py中,您可以使用这样的模拟模块:

@mock.patch('path.my_file.randint', return_value=0)
def test_place_value(m_randint):
    obj = math_q.Questions()
    obj.place_value("value of {0} in {1}", [1,2,3,4])

    m_randint.assert_called_once_with(0, 3)
    assert obj.questions["question1"] == ...

然后只编写4个测试来处理所有情况。

旁注:我强烈建议切换到pytest。