我可以使用unittest.mock.patch修补'随机'吗?

Emi*_*che 6 python unit-testing mocking python-3.x

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

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
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*ser 5

patch.function似乎不存在.你可以改用patch它自己:

with patch('random.choice', return_value=3) as mock_random:
    choice = my_code_that_uses_random()
    assert choice == 3
Run Code Online (Sandbox Code Playgroud)

  • 如果需要用实函数替换它,可以用``side_effect = lambda seq:seq [0]`替换`return_value`.这将让您实际测试传递序列并获取元素.在这种情况下,它将始终"选择"第一个元素. (3认同)