[英]Return from __call__ immediately if a value gets changed in the class
[英]Mock the return value of __call__
我正在用Python编写单元测试,我想创建一个模拟函数,该函数在调用时返回另一个模拟(由我指定)。
这是我尝试过的:
my_mock = Mock()
fn = Mock()
fn.__call__ = Mock()
fn.__call__.return_value = my_mock
但是当我调用fn()
,它返回一个不同的模拟,可能是某些描述的默认值。
知道我在做什么错吗? 另外,有没有更整洁的方法可以做到这一点? 我很想能够写类似fn = MockFunction(my_mock)
。
使用return_value
参数:
mock_mock = Mock(return_value=my_mock)
从文档中 ,可以预期您的代码可以正常工作。 在一个示例中,文档使用__str__
方法做的事情几乎相同,并且可以工作:
>>> mock = Mock()
>>> mock.__str__ = Mock()
>>> mock.__str__.return_value = 'fooble'
>>> str(mock)
'fooble'
但是,这仅适用于大多数魔术方法,并且其适用的确切列表尚未记录:
由于魔术方法的查找与常规方法[2]不同 ,因此已特别实现了此支持。 这意味着仅支持特定的魔术方法。 支持的列表几乎包括所有这些。 如果您有任何遗漏,请告诉我们。
__call__
恰好是列表中没有的魔术方法之一。 相反,您需要使用模拟本身的return_value
属性,或向构造函数提供return_value
参数。
fn = Mock()
fn.return_value = my_mock
# or
fn = Mock(return_value=my_mock)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.