我在Python中编写单元测试,我想创建一个模拟函数,在调用时返回另一个模拟(由我指定)。
以下是我尝试的内容:
my_mock = Mock()
fn = Mock()
fn.__call__ = Mock()
fn.__call__.return_value = my_mock
但是当我调用fn()
时,它会返回一个不同的模拟,可能是某些描述的默认值。
知道我做错了什么吗?还有,有一个更简洁的方法来做到这一点?我希望能够写出fn = MockFunction(my_mock)
之类的东西。
答案 0 :(得分:1)
使用return_value
参数:
mock_mock = Mock(return_value=my_mock)
答案 1 :(得分:1)
从docs开始,期望您的代码能够正常工作是合理的。文档与示例中的__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)