如何用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
相关产品推荐
相关产品推荐

