gpt4 book ai didi

python - pytest monkeypatch : it is possible to return different values each time when patched method called?

转载 作者:行者123 更新时间:2023-12-02 17:24:45 29 4
gpt4 key购买 nike

unittest 中,我可以断言 side_effect可使用值进行迭代 - 当调用修补方法时将逐一返回它们中的每一个,而且我 foundunittest 中,我的修补方法可以根据输入参数返回不同的结果。我可以在 pytest 中做类似的东西吗? Documentation没有提到这一点。

最佳答案

您可以使用 Mock 的 side_effect用于设置每次调用要返回的内容的参数。

side_effect: A function to be called whenever the Mock is called. See the side_effect attribute. Useful for raising exceptions or dynamically changing return values. The function is called with the same arguments as the mock, and unless it returns DEFAULT, the return value of this function is used as the return value.Alternatively side_effect can be an exception class or instance. In this case the exception will be raised when the mock is called.If side_effect is an iterable then each call to the mock will return the next value from the iterable.A side_effect can be cleared by setting it to None.

例如:

return_data = [3, 5]
test_mock = Mock(side_effect=return_data)
monkeypatch.setattr(your_module, "some_func", test_mock)

这样你第一次调用“some_func”时它会返回 3,当你第二次调用它时它会返回 5

如果调用了两次就可以了

assert test_mock.call_count == len(return_data)

返回数据应该是可迭代的(列表、集合、元组)并且可以包含任何你想要的东西(整数、字符串、对象、元组、列表……)

关于python - pytest monkeypatch : it is possible to return different values each time when patched method called?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39586925/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com