我无法理解某些测试代码中发生了什么。它看起来像这样:
import pytest
from unittest.mock import MagicMock
from my_module import MyClass
confusing_mock = MagicMock(
return_value=b"",
side_effect=[
ConnectionError(),
b"another_return_value?",
b"another_another_return_value?"
])
mocked_class = MyClass()
monkeypatch.setattr(mocked_class, "method_to_call_thrice", confusing_mock)
我知道:
side_effect
是一个在调用 mock 时调用的函数- 但如果
side_effect
是可迭代的,那么“对模拟的每次调用都将返回可迭代的下一个值”(感谢pytest docs) - 文档还说,如果传递给的函数
side_effect
返回DEFAULT
,那么模拟将返回它的正常值return_value
但这是我不明白的:
- 当我同时提供副作用列表和 返回值时会发生什么?
- 我应该期望在每次调用时看到
MyClass.method_to_call_thrice
什么?