You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pytest Mock对象的__call__方法使直接调用返回指定值?

解决pytest Mock对象直接调用返回指定值的问题

你的问题出在直接给Mock实例的__call__属性赋值新Mock对象,并不会改变调用该实例时的行为——Python调用object()时,实际是调用对象所属类的__call__方法,而pytest的Mock类的__call__逻辑并没有关联到实例的__call__属性。

要让my_mock()直接返回指定值,有两种简单的正确写法:

方法一:创建Mock时直接指定return_value

from pytest import Mock
mock_output = "mock"
my_mock = Mock(return_value=mock_output)

方法二:创建后设置return_value属性

from pytest import Mock
my_mock = Mock()
mock_output = "mock"
my_mock.return_value = mock_output

设置完成后,两种调用方式都会返回指定值:

my_mock.__call__() # 输出"mock"
my_mock() # 输出"mock"

如果需要更复杂的调用逻辑(比如每次调用返回不同值、抛出异常),可以用side_effect属性:

my_mock.side_effect = ["first", "second", ValueError("error")]
my_mock() # 返回"first"
my_mock() # 返回"second"
my_mock() # 抛出ValueError

内容的提问来源于stack exchange,提问作者invalid syntax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:03:11