繁体   English   中英

模拟__call__的返回值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM