kapton 发表于 2024-8-5 11:16:16

aiohttp.test_utils.reset_mock()

{:5_104:}mock_.side_effect = AssertionError
{:5_104:}mock_.reset_mock()
{:5_104:}mock_.return_value={}

{:5_104:}这三个连用为什么.return_value还是被.side_effect影响了

FishC 发表于 2024-8-5 11:16:24

好的,咱们来聊聊`mock`这个有趣的东西,以及你提到的几个方法。

首先,`return_value`是用来指定你的 mock 对象在被调用时返回一个特定值的。在你的例子中,你给了它一个空字典 `{}`。而`side_effect` 则是用来控制 mock 在被调用时发生什么的,它可以是一个异常、一个可调用对象或一个列表等。

所以这里的问题在于,当你设置了`mock_.side_effect = AssertionError`,这意味着每当调用这个 mock 时,它都会抛出一个 `AssertionError`。即使你还设定了 `mock_.return_value = {}`,因为 `side_effect` 是优先级更高的选项,所以它会把`return_value`“打败”掉。

然后你使用`reset_mock()`可以重置一些状态,包括 `call_args`、`call_count`等,但它不会影响 `side_effect` 这个设置。一旦你设置了 `side_effect`,它就像是在说:“无论你设定的 `return_value` 是什么,我的存在就是要抛出错误!”

所以,简单来说,`side_effect`会优先于`return_value`。想象一下,是个调皮的小孩,总是喜欢搞事情,不管家长怎么安排他回家吃饭,他就是不听!

如果你想要让 `return_value` 生效,你可以把 `side_effect` 设置为 `None`,或者简单地删除它。

希望这个解释能帮你理解!如果还有什么疑问,随时问我哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: aiohttp.test_utils.reset_mock()