【问题标题】:Can I patch 'random' using unittest.mock.patch?我可以使用 unittest.mock.patch 修补“随机”吗?
【发布时间】:2013-08-27 10:39:56
【问题描述】:

我有兴趣测试一些使用“随机”模块的代码,并且我希望能够在我的测试运行时修补/插入我自己的随机随机版本,它返回一个已知值,并且之后将其放回正常的随机模块。从文档中我只能看到我可以修补类。有没有办法修补功能?像这样的:

def my_code_that_uses_random():
    return random.choice([0, 1, 2, 3])

with patch.function(random.choice, return_value=3) as mock_random:
    choice = my_code_that_uses_random()
    assert choice == 3

该代码不起作用,我需要什么?

【问题讨论】:

    标签: python unit-testing python-3.x mocking


    【解决方案1】:

    patch.function 似乎不存在。您可以改用patch 本身:

    with patch('random.choice', return_value=3) as mock_random:
        choice = my_code_that_uses_random()
        assert choice == 3
    

    【讨论】:

    • 如果您需要将其替换为真正的函数,您可以将return_value 替换为:side_effect=lambda seq: seq[0]。这将让您实际测试传递序列并取出元素。在这种情况下,它将始终“选择”第一个元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多