0

我见过直接使用参数unittest.mock.patch()的例子。unittest.mock.patch.object()return_value

例子:

with patch.object(ProductionClass, 'method', return_value=None) as mock_method:
    thing = ProductionClass()
    thing.method(1, 2, 3)

然而,这个论点并没有被正式记录为unittest.mock.patch()nor unittest.mock.patch.object()。(但是在官方文档的示例中使用了它)。

这是支持还是未定义的行为?它应该记录在案,而不是吗?这些例子是巧合吗?这个论点有什么作用;它会做一些不直观的事情,还是不言自明?

4

1 回答 1

2

mock.patch的文档:

patch()接受任意关键字参数。AsyncMock如果修补的对象是异步的,则这些将被传递给,MagicMock否则或new_callable如果指定。

mock.patch.object的文档:

patch(),patch.object()采用任意关键字参数来配置它创建的模拟对象。

mock.Mock的文档中,它实际使用的地方:

return_value:调用模拟时返回的值。默认情况下,这是一个新的 Mock(在首次访问时创建)。见return_value属性。

为了更好地衡量,该return_value属性的文档显示了示例的用法:

设置此项以配置通过调用模拟返回的值:

>>> mock = Mock()
>>> mock.return_value = 'fish'
>>> mock()
'fish'

默认返回值是一个模拟对象,您可以按正常方式配置它:

>>> mock = Mock()
>>> mock.return_value.attribute = sentinel.Attribute
>>> mock.return_value()
<Mock name='mock()()' id='...'>
>>> mock.return_value.assert_called_with()

return_value也可以在构造函数中设置:

>>> mock = Mock(return_value=3)
>>> mock.return_value
3
>>> mock()
3

So, as you can see, this is all well documented, though admittedly it may be overlooked at a first glance due to the arguments not present in the signature.

于 2021-11-09T06:19:14.387 回答